添加SSL证书,给网站加把小绿锁

为什需要它

隐私在当下环境下谈不上有保护,东西裸露在外,就算有品德高尚的人,不起贪念,却不能保证人人都没有歹念,毕竟这是和人性在做斗争,共享经济的伤痛历历在目。添加保护和去银行取钱用包遮挡起来,防止泄密一样,加锁也是为了,让旁观者不太容易看出来是什么东西,降低泄密的风险。

相关介绍

本文下面第二个和第三个参考资料,已经说的很清楚了,这里只记录实践过,怎么生成证书。

为了推广HTTPS协议,电子前哨基金会EFF成立了Let’s Encrypt,可以提供免费证书。为了便于发布证书又提供了Certbot工具,本文就是基于Certbot,在Centos7和Wordpress及LNMP环境下的操作。

安装环境

Certbot包装在EPEL(Enterprise Linux的额外软件包)中,要使用Certbot,必须首先启用EPEL存储库并启用EPEL可选通道,CentOS用户运行以下命令来安装EPEL。

$ yum install epel-release

安装certbot

$ sudo yum install certbot-nginx

获取SSL证书

本文使用Webroot模式,Certbot在验证服务器域名的时候,会生成一个随机文件,然后Certbot的服务器会通过HTTP访问你的这个文件,因此要确保你的Nginx配置好,以便可以访问到这个文件。

修改你的nginx配置文件/usr/local/nginx/conf/vhost/your-domain-name.conf,在server中添加:

location ^~ /.well-known/acme-challenge/ {
default_type “text/plain”;
root /usr/share/your-folder-name;
}
location = /.well-known/acme-challenge/ {
return 404;
}

需要修改成你的路径,接着重新加载Nginx配置:
$ service nginx restart

测试配置

$ certbot certonly --webroot -m name@gmail.com -d domain.com,www.domain.com --agree-tos --dry-run
# -d 紧接着域名,多个域名采用英文半角逗号
# 上面的配置表示多个域名共享同一对SSL证书信息
# –agree-tos 表示自动同意相关协议
# -m 表示邮箱
# –dry-run 模拟运行,建议首次将该参数配置,当看到下面的信息表示执行命令成功

IMPORTANT NOTES:
– The dry run was successful.

获取证书

$ certbot certonly --webroot -m name@gmail.com -w /home/wwwroot/your-folder-name -d domain.com,www.domain.com --agree-tos
证书生成成功后,会有 Congratulations 的提示,并告诉我们证书放在 /etc/letsencrypt/live 这个位置

配置 Nginx

修改你的nginx配置文件/usr/local/nginx/conf/vhost/your-domain-name.conf,把servers前面修改成下面这样

server {
listen 443 ssl https2;
server_name domain.com www.domain.com;
index index.html index.htm index.php;
root /home/wwwroot/your-folder-name;
ssl_certificate /etc/letsencrypt/live/your-folder-name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-folder-name/privkey.pem;

然后在最下面添加301定向转移,目的是让http的请求都全部走https

server {
listen 80;
server_name domain.com www.domain.com;
return 301 https://$server_name$request_uri;
}

配置好后重启nginx
$ service nginx restart
目前为止,SSL证书已经好了,再次重启网站,就可以了看到小绿锁了。

配置nginx参考

处理网页打不开

假设你设置好后,网站打不开,需要在进入数据库后台,数据库进去方法:在网页中输入你的ip/phpmyadmin,找到wordpress的数据库中的wp-options修改home和siteurl中的域名为https://

部分网页时没有小绿锁

这可能是因为,之前的网页、插件、主题中有http的链接,可以在wordpress中搜索Velvet Blues Update URLs插件,用新域名替换旧的域名。

测试网站安全性评分

如果一切都好了的话,可以在SSL服务器测试输入自己的域名看下自己的评分。

SSL证书自动续期

certbot给的免费证书,虽然只有90天的有效期,但是它提供了续期设置

测试续期

我们先不急着续期,先模拟下证书到期后,能否续期
$ certbot renew --dry-run
看到如下说明测试成功:

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/smile365.world/fullchain.pem (success)

设置自动续期

自动续期是通过设定Linux定时任务Crontab来实现的
安装Crontabs:
$ yum install crontabs
手动启动服务
$ service crond start
加入开机启动
$ chkconfig –level 35 crond on
编辑当前用户的crontab文件
$ crontab -e
在打开的文件中,添加配置文件
0 3 * * 1 certbot renew --post-hook "service nginx restart" 
# 命令表示每周一凌晨3点执行一次,其中“–post-hook”是指在certbot重新申请证书之后执行的代码,这里让nginx重启

Crontabs格式说明
# Example of job definition:
# .—————- minute (0 – 59)
# | .————- hour (0 – 23)
# | | .———- day of month (1 – 31)
# | | | .——- month (1 – 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * codeto be executed

后记

至此,网站设置HTTPS就到这里了,官方提供了简便的命令,也让大家设置起来非常的方便,最重要的是让网站有了点基本的保护了。

参考资料

$ openssl version

留下评论