前言
网络传输数据安全很重要!!自从苹果宣布,苹果App Store中的所有App都必须启用ATS(App Transport Security)安全功能。iOS移动开发就开始引起重视。本文记录了站长在阿里云ubuntu系统上搭建Https证书的过程。
本文记录的顺序
1.Https的理解。
2.安装certbot,使用letsencrypt生成免费的cert证书。
3.修改Nginx的配置文件。
1.Https的理解
https是为了加密客户端与服务器之间的数据而诞生的。 传输间的加密方式是对称加密,握手时的加密是非对称加密。为了避免网络链路中被拦截伪装,第三方签名认证起到了重要的作用。具体的握手过程图示如下:
PS:以上图片,在百度图片搜索获得!!
随机生成的密钥R是一个随机的字符串,握手后,所有的数据都会使用这个字符串来加密和解密。
第三方的签名认证,发生在 上图 的 “合法” 判断。用于确认服务器返回的数字证书是否来源于注册的合法服务器!!!
2.安装certbot,使用letsencrypt生成免费的cert证书。
1.ubuntu安装cerbot
sudo apt-get install certbot
2.申请证书
certbot certonly --webroot -w /网站根目录 -d 域名.com -d www.域名.com
注意:证书的限制是每周20个,每个证书可以添加100个子域名,这说明,你可以每周有2000个子域名。
另外,相同的证书(相同的命令),每周最多可以生成5个证书。所以,生成证书和删除证书时考虑一下啊!!!
如果,你发现你连续5次相同命令生成证书后,返回说太多证书,可以在生成证书的命令里添加多一个子域名,就可以再生成!只要不超过每周20个就可以!!
经过一轮的确认和输入邮箱,你最后会得到生成成功的提示如下:(这个过程letsencrypt会验证你所写的域名和子域名)
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/varsiri.com-0003/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/varsiri.com-0003/privkey.pem Your cert will expire on 2018-02-02. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
根据上面的提示,你会发现,你的证书就在/etc/letsencrypt/live/你的域名/ 下面。
里面有5 个文件。
cert.pem – Apache服务器端证书
chain.pem – Apache根证书和中继证书
fullchain.pem – Nginx所需要ssl_certificate文件
privkey.pem – 安全证书KEY文件
README 证书说明文件
到这里证书已经生成完毕!!!!!!!!!!
生成的证书路径为: /etc/letsencrypt/live(这个路径用于配置ngnix的配置文件)
3.修改Nginx的配置文件
server { listen 80 default_server; listen [::]:80 default_server; location / { rewrite ^(.) https://$host$1 permanent; } location ~ /.well-known { allow all; } } server { listen 443 default_server; listen [::]:443 default_server; root /var/www/blog; server_name varsiri.com www.varsiri.com; index index.html index.htm index.nginx-debian.html; ssl on; ssl_certificate /etc/letsencrypt/live/varsiri.com-0004/cert.pem; ssl_certificate_key /etc/letsencrypt/live/varsiri.com-0004/privkey.pem; ssl_client_certificate /etc/letsencrypt/live/varsiri.com-0004/chain.pem; # ssl_certificate "/var/www/QQSSL/1_www.varsiri.com_bundle.crt";#证书文件 # ssl_certificate_key "/var/www/QQSSL/2_www.varsiri.com.key";#证书KEY文件 ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; #error_log /var/www/NginxLog/error.log error; location / { try_files $uri $uri/ =404; index index.html index.htm index.php; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; } }
以上的配置,跳转,开放端口,配置证书,设置网站根目录,路由设置等功能!!!
最后,重启nginx
nginx -s reload
到这里,你已经有了3个月的有效证书(letsencrypt方案),下面,我们设置自动更新证书!!!
证书自动更新
设置脚本文件,输入
crontab -e
文件中添加脚本命令
30 4 * * 1 certbot renew --renew-hook "systemctl restart nginx" --quiet > /dev/null 2>&1 &
设置了每周一凌晨4点30自动更新证书,如果更新成功就自动重启nginx服务,证书在到期前30天内才能更新,多余的更新会自动忽略掉的,每周更新还有一个好处是更新可能会失败,这样最多还有4次的尝试机会来保证不会过期.
修改好后保存退出。
上面文章描述如果觉得写得不清晰,请查看以下博客: