Yan
Yan Just a simple man.

ssl申请与配置

ssl申请与配置

配置使用linux基金会的开源ssl证书Let's Encrypt

  1. Let’s Encrypt 证书不仅是免费的,而且支持通配符证书(通配符证书指的是一个可以被多个子域名使用的公钥证书),多个子域名使用起来十分方便。
  2. 通过源码的脚本可以直接获取,申请流程非常简单.
  3. 证书有效期为90天,通过脚本可以直接更新.

服务器设置

以阿里云为例,其他服务器配置方式相同

433端口设置

登录服务器控制台,确认实例的安全组里,433端口是否有开放,没有需要添加一条规则

433-setting

域名解析设置

域名需要设置一条解析记录,以便申请工具通过域名访问,确认域名所属

domain name

  1. 选择记录类型,一般选A,指向ipv4地址,如果你是用ipv6地址,选择AAAA,域名重定向,选择CNAME.
  2. 主机记录,选择www或者@或者其他都可以.这里需要记住你的主机记录,之后会用到.
  3. 你的域名
  4. 记录值选择你要解析的ip地址
  5. TTL使用默认值就可以.

服务器端口处理

脚本在生成ssl证书时,需要使用到80433端口,要保证端口没有被占用

1
2
3
4
5
6
7
8
$ sudo netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      623/nginx: master p 
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      467/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      572/sshd            
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      623/nginx: master p 

使用kill命令结束掉使用80433端口的进程

1
$ sudo kill [PID]

到这里,服务器的准备工作就完成了

申请

获取脚本文件

脚本开源在了github上,通过git克隆仓库到本地

1
2
3
$ cd ${workspace}
$ git clone https://github.com/certbot/certbot
$ cd certbot

生成证书

1
$ ./certbot-auto certonly --webroot --agree-tos -v -t --email ${email} -w ${website root} -d ${domain name}
  1. ${email} 这里填写你的邮箱地址,建议与服务器的申请账号的邮箱地址保持一致
  2. ${website root} 你的网页源码目录
  3. ${domain name} 上面解析域名时,你设置的解析域名,如果主机记录设置了www,这里应该是www.{domain name},设置了@,就直接填写域名

如果你上面的设置都没问题,那么这里,问题就应该成功生成证书了

1
2
root# ls /etc/letsencrypt/live/`${domain name}`/
cert.pem       chain.pem      fullchain.pem  privkey.pem    README

生成dhparams

dhparams保证双方能安装的交换秘钥

1
$ openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048

配置

准备好证书以后,就要配置进部署工具里,这里以nginx为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
       listen 80;
       server_name ${domain name} www.${domain name};
       return 301 ${domain name}$request_uri;
}

server {
       listen 443 ssl;
       server_name ${domain name} www.${domain name};
       ssl on;
       ssl_certificate /etc/letsencrypt/live/${domain name}/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/${domain name}/privkey.pem;
       ssl_dhparam /etc/ssl/certs/dhparams.pem;
       ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
       ssl_ciphers HIGH:!aNULL:!MD5;
       location / {
              root ${website root};
              index index.html index.htm;
       }
}

重启nginx服务即可

更新证书

证书有效期是90天,需要定期更新

1
$ ./certbot-auto renew -v

other

完整的nginx配置文件: https://github.com/yan-wyb/source/blob/master/web/nginx/nginx.conf

issues

如果有疑惑或错误,请提issues –> Issues