免费的SSL证书

Let’s Encrypt是一个公共且免费的SSL项目。SSL,英文全称Secure Sockets Layer,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)的技术,可确保数据在网络上的传输过程中不会被截取及窃听。简单的说,就是使用SSL加密http,来保证网站安全性和防止信息泄露。

安装 certbot获取证书
注意:安装证书之前要保证网站能通过http域名访问,不然申请过程会报错。

yum install certbot
certbot certonly --webroot -w /var/test/ralap -d ralap.net -d www.ralap.net
/var/test/ralap为网站根目录,后面跟多个域名。根据提示输入邮箱等确认信息。

Let’s Encrypt证书的生成之后,在“/etc/letsencrypt/live/ralap/”域名目录下有4个密钥证书相关文件,我们需要配置其中两个到nginx。

fullchain.pem - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件
安装certbot可能报错,可以在网上找到解决方法。

ImportError: No module named 'requests.packages.urllib3'
解决方法:

pip install --upgrade --force-reinstall 'requests==2.6.0' urllib3
修改nginx配置
server {

listen       80 default_server;
listen       [::]:80 default_server;
server_name  www.ralap.net ralap.net;
root         /var/test/ralap;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

#增加的部分
location / {
    rewrite ^(.*) https://$host$1 permanent;
}

error_page 404 /404.html;
    location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
    location = /50x.html {
}

}

Settings for a TLS enabled server.

server {

listen       443 ssl http2 default_server;
listen       [::]:443 ssl http2 default_server;
server_name  www.ralap.net ralap.net;
root         /var/test/ralap;

ssl_certificate "/etc/letsencrypt/live/ralap.net/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/ralap.net/privkey.pem";
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;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

#增加的部分
location ~ /.well-known {
    allow all;
}

error_page 404 /404.html;
    location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
    location = /50x.html {
}

}
在原来http的server中修改

将http的连接重定向到https

location / {

rewrite ^(.*) https://$host$1 permanent;

}
在https的server中修改

ssl_certificate "/etc/letsencrypt/live/ralap.net/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/ralap.net/privkey.pem";

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

location ~ /.well-known {

allow all;

}
重新启动nginx

systemctl restart nginx
再打开网站就可以看到网站是加密过的了。

证书自动续期
Let’s Encrypt的证书只有3个月有效期,可以设置任务自动续期。

crontab -e
crontab执行时可能会报错,继续执行就可以了。

在打开的文件中输入

30 4 1 certbot renew --renew-hook "systemctl restart nginx" --quiet > /dev/null 2>&1 &
设置了每周一凌晨4点30自动更新证书,如果更新成功就自动重启nginx服务,证书在到期前30天内才能更新,多余的更新会自动忽略掉的,每周更新还有一个好处是更新可能会失败,这样最多还有4次的尝试机会来保证不会过期。

参考:永久免费的SSL证书 - Let’s Encrypt 证书部署 HTTPS 并自动续期

添加新评论