2018年1月24日更新

Let's Encrypt 入门教程 | Ming's Blog这篇教程非常非常好,大部分是参考他的。下面是一些改进和总结。

CentOS7/nginx:
安装certbot

yum install -y epel-release
yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
sudo yum install certbot-nginx

停掉服务器(不停后面会报错)

/etc/init.d/nginx stop
certbot certonly --standalone

接下来输入邮箱、域名,就能获取成功,在/etc/letsencrypt/live/example.com/目录看到文件。

因为用了一键安装包,所以配置文件不在/etc/nginx/nginx.conf目录,而在/usr/local/nginx/conf/nginx.conf,注意其中include的conf文件。
然后在该配置文件中,加证书信息,加http到https的301跳转。教程里很详细不细讲。注意的是,教程里用的是cert.pem,应该用fullchain.pem更好一点。

最后就大功告成啦(°∀°)ノ

/etc/init.d/nginx start

再加个HSTS,原理:从 HTTP 到 HTTPS 再到 HSTS-博客-云栖社区-阿里云
做法:本博客正式启用 HTTPS | JerryQu 的小站 将域名加入 HSTS Preload List - imlonghao
简单说就是在配置文件中加入

add_header      Strict-Transport-Security max-age=31536000;

ssllabs可以测试ssl,如何获得高分:Strong SSL Security on nginx - Raymii.org


下面是啰啰嗦嗦的原文

无意间读到这篇文章,才发现原来到明年(2017年)chrome要把所有不是https的网站标记为不安全网站,加上以前我以为证书很贵,这篇文章让我发现原来有免费的证书,于是折腾了一天,我用的是LetsEncrypt。

现在来啰嗦地记录一下过程吧~

首先打开它的官网->Get Started

2016-12-03_100755.png

发现貌似要用Certbot,Cert就是证书的意思,bot就是机器人,就这样字面意思理解一蛤。

进去以后根据自己网站的情况选择版本。

2016-12-03_101025.png

然后开始按照教程,先安装yum install certbot,然后certbot certonly --webroot -w /home/wwwroot/hujiyuan.cn/ -d hujiyuan.cn -d www.hujiyuan.cn, 发现不行,如下图的403 Forbidden。

2016-12-02_211228.png

然后仔细读一读使用文档>>。原来这个certbot有几个插件,上面那句话用的是webroot插件。

To use the webroot plugin, your server must be configured to serve files from hidden directories. If /.well-known is treated specially by your webserver configuration, you might need to modify the configuration to ensure that files inside /.well-known/acme-challenge are served by the webserver.

仔细分析这句话,觉得错误原因应该是,以"."开头的文件夹都是隐藏文件夹,而nginx默认设置里面禁止对隐藏文件夹的改动。

于是要改nginx的设置啊,找nginx的conf文件在哪,不懂原理,找不到,后来在/root/lnmp1.3-full/conf这个目录里面找到一个nginx.conf,就在这个里面改。结果没成功。(最后发现没成功的原因是这个conf文件不是真正有用的配置文件,当初博客环境配置用的是LNMP一键安装包,所有的配置文件应该在这里/usr/local/nginx/conf。)

于是换了一个方法。为什么用webroot插件?因为他的优点是可以不停掉网站,于是我就停掉网站/etc/init.d/nginx stop以后,用certbot的standalone插件来搞的certbot certonly --standalone -d hujiyuan.cn -d www.hujiyuan.cn,然后就成功了。

2016-12-02_223618.png

总结一下就是:

yum install certbot
/etc/init.d/nginx stop
certbot certonly --standalone -d hujiyuan.cn -d www.hujiyuan.cn
/etc/init.d/nginx start

这还没完,这只是有了证书,还没有配置好。

参照这篇教程>>中的nginx配置把/usr/local/nginx/conf/vhost/hujiyuan.cn.conf配置好,并且设置好pathinfo(添加include enable-php-pathinfo.conf;),到博客后台设置路径为https://hujiyuan.cn。

2016-12-03_104500.png

这样搞,网页还是不大正常,虽然是https,但是没有绿色的卡哇伊小锁,原来是因为网页里的图片也都应该是https的,所以全部改回来就可以了。注意使用Chrome浏览器强大的开发者工具,按下F12。

2016-12-03_115119.png

最终效果:
2016-12-03_122835.png

其实应该搜LetsEncrypt教程的,这样会快一点,像我这种去读官方英文文档的,比较慢,走了不少弯路。应该早点发现这个教程>>这个教程>>

附上hujiyuan.cn.conf

2017年3月5日更新

做记录果然很有用!今天发现各个浏览器都提示证书过期,禁止访问。于是忽略安全警告后,重温这篇教程,几分钟就给证书续了三个月。

几个月没登录,可以看到,有500多次失败的登录……

2017-03-05_152345.png

执行certbot renew的命令后出现和上面同样失败信息。

2017-03-05_152838.png

还是老老实实停掉nginx吧。

2017-03-05_153235.png

成功~

2017年7月1日更新

总结续命方法:
先登录后台,然后顺序执行:

/etc/init.d/nginx stop
certbot renew
/etc/init.d/nginx start

2017年9月9日更新

上面的代码是正确的,不过要在收到他们的通知邮件,也就是大概距离过期还有20天时才能renew成功。

2018年1月24日更新

更改了配置文件以后要生效:

/etc/init.d/nginx reload

LNMP一键安装包的nginx配置文件是/usr/local/nginx/conf/nginx.conf,其结尾还包有一句话,include xxx.conf,所以重点是去编辑这个文件才行。

https的301跳转参考这个教程Let's Encrypt 入门教程 | Ming's Blog,就是加一句return 301 https://$server_name$request_uri;

return 301 https://$server_name$request_uri;