使用Let's Encrypt永久免费SSL证书

工具

Let’s Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

前置准备

  • 停止nginx服务,不然会出现 ‘Problem binding to port 80: Could not bind to IPv4 or IPv6.’ 错误提示
  • 域名需要解析到服务器,不然会出现 ‘Failed authorization procedure’ 错误提示
  • 安装git工具
  • 安装nginx

1)、下载项目运行,生成证书

// 创建目录 mkdir github // 从github拉取let’sEncrypt项目 git clone https://github.com/certbot/certbot // 进入目录 cd certbot // 执行certbot-auto命令就是生成证书的过程 ./certbot-auto certonly --standalone --email xxx@xxx.com -d www.isyxf.com -d jenkins.isyxf.com

一步到底,参数中email是你的域名联系人邮箱地址,参数d就是你要加签的域名,可以多个,生成过程有提示的话agree和yes即可。

2)、查看证书

生成的证书位于/etc/letsencrypt/下

ls /etc/letsencrypt/ accounts archive csr keys live renewal cd /etc/letsencrypt/live/www.isyxf.com && ll cert.pem - Apache服务器端证书 chain.pem - Apache根证书和中继证书 fullchain.pem - Nginx所需要ssl_certificate文件 privkey.pem - 安全证书KEY文件

这4个文件就是生成的密钥证书文件,但是他们都是文件链接而已,实际的文件位于/etc/letsencrypt/archive/www.isyxf.com下。

ls /etc/letsencrypt/archive/www.isyxf.com/ cert1.pem chain1.pem fullchain1.pem privkey1.pem

3)、配置nginx

server { listen 80; server_name www.isyxf.com isyxf.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name www.isyxf.com; // 公钥和私钥路径填写自己存放的路径 ssl_certificate /etc/nginx/certs/www.isyxf.com/fullchain.pem; ssl_certificate_key /etc/nginx/certs/www.isyxf.com/privkey.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { tcp_nodelay on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; root /usr/share/nginx/html/www.isyxf.com; # 因为是单页应用,不管什么路径都返回index.html文件 try_files $uri $uri/ /index.html; index index.html index.htm; } location /api/ { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://xxx.xx.xx.xxx:xxxx; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

上面有ssl字样的配置是必须添加的,最后重启nginx

4)、证书续签

Let’s Encrypt 生成的免费证书为3个月时间,但是我们可以无限次续签证书

./certbot-auto renew

5)、脚本自动续签

不想每次手动去生成证书,可以写过脚本定时器自动生成。

// 待开发