我是如何10分钟让WordPress全站HTTPS的

2016-12-16 点击:8475

为什么要HTTPS?

记得我以前有一个流量还不错的网站,经常打开很慢,甚至导致JS失效。经检查发现是使用了CNZZ统计代码,而CNZZ域名又被劫持了,导致大量流量被劫持,当然也考虑过HTTPS,但是一看价格,就放弃了,把CNZZ换成百度统计就没事了。不过这件事一直耿耿于怀,如今的互联网越来越不安全,几乎每个人都有遭遇ISP广告,域名劫持等侵害行为,HTTP明文传输的模式,让网站也非常不安全。

必须要HTTPS

谷歌从 2017 年起,Chrome 浏览器将也会采用 HTTP 协议的网站标记为「不安全」网站;苹果从 2017 年 iOS App 将强制使用 HTTPS;在国内热火朝天的小程序也要求必须使用 HTTPS 请求。百度对HTTPS加密的网站优先收录,HTTPS更有利于SEO,在这样的环境下HTTPS是大势所趋,每个WordPress网站都应该使用HTTPS加密协议。

让我们加密吧 Let's encrypt

Let's encrypt是一家不以盈利为目的提供免费CA证书的机构,它旨在让全世界所有的互联网服务能够简单自动化部署加密协议,让https能够在所有的网站中普及。很多著名公司对其提供赞助,比如facebook,思科,mozilla等。它是对ACME(automated certificate management environment)协议的实现,只要实现了ACME协议的客户端都可以跟它交互。

Let's encrypt从2016年初开放以来,超过20M的增长率

LetsEncrypt

Let's Encrypt 的最大贡献是它的 ACME 协议,第一份全自动服务器身份验证协议,以及配套的基础设施和客户端。这是为了解决一直以来 HTTPS TLS X.509 PKI 信任模型,即证书权威(Certificate Authority, CA)模型缺陷的一个起步。

对应WordPress站长来说最大的意义在于,加密流量,避免国内各大ISP惯用的HTTP劫持,提升网站信任度,让WordPress网站更专业。

10分钟部署Let's Encrypt,让WordPress全站HTTPS

Let’s Encrypt的签发/续签虽说都是脚本自动化,但还是略显繁琐,而acme.sh相对来说就非常省心,自动化程度更高,大大缩短部署 Let’s Encrypt 证书的时间。

安装acme.sh

curl  https://get.acme.sh | sh

这样就已经安装好了acme.sh脚本,具体动作:

  1. 安装文件和配置文件都在home目录下,也就是 ~/.acme.sh/
  2. 创建一个bash alias, alias acme.sh='~/.acme.sh/acme.sh' ,重新打开终端后直接输入 acme.sh 就可以快速方便地使用这个脚本
  3. 创建一个crontab定时任务,每天0点进行acme.sh脚本的续签证书,自动升级(可选)等任务
    整个安装过程对环境无污染,所有新文件仅限 ~/.acme.sh/ 目录内。

acme.sh生成证书

acme.sh生成证书有两种方式,域名验证及http方式,在此处推荐使用http验证方式,在一台VPS上进行即可,无需额外的域名设置。

acme.sh  --issue  -d mydomain.com --webroot  /var/www/mydomain.com/

运行这个命令之后证书就已经签好,此处以我的域名www.wpweixin.net为例,在 ~/.acme.sh/www.wpweixin.net/ 里可以找到所签发的证书,包括csr,key,完整链证书等,使用起来非常方便。

acme.sh安装证书

acme.sh安装证书也异常方便,除了apache自动安装之外,nginx的证书安装也是半自动的,自己只需修改nginx配置文件即可

此处以www.wpweixin.net为例,一定要修改为自己的域名

官方:

acme.sh  --installcert  -d  www.wpweixin.net \
--key-file /etc/nginx/ssl/www.wpweixin.net.key \
--fullchain-file /etc/nginx/ssl/www.wpweixin.net.cer \
--reloadcmd "service nginx force-reload"

我的:

acme.sh --installcert -d www.wpweixin.net \
--keypath  /etc/nginx/ssl/www.wpweixin.net.key  \
--fullchainpath /etc/nginx/ssl/www.wpweixin.net.fc.cer \
--reloadcmd  "service nginx reload"

这样证书就已经安装到位,比如此处的路径是在 /etc/nginx/ssl/ 路径下:

  • key文件为 /etc/nginx/ssl/www.wpweixin.net.key
  • 完整链证书文件为 /etc/nginx/ssl/www.wpweixin.net.fc.cer
    更棒的是,acme.sh 会自动记住证书安装的位置,以后自动续签之后会自动安装到相应位置并重启Nginx,不需要再手动添加crontab任务,写一大堆路径并记得重启Nginx。

和官方简略教程不同的是,我是用完整证书链进行安装的,以防一些机器(很有可能)没有 Let’s Encrypt 的根证书造成SSL不被信用的情况

 

修改Nginx配置文件启用ssl

这时需要修Nginx配置文件使得站点用上SSL证书,此处以我的域名www.wpweixin.net为例,我的配置文件是 /etc/nginx/conf.d/www.wpweixin.net ,加上如下语句:

### Begin of SSL config
ssl on;
ssl_certificate /etc/nginx/ssl/www.wpweixin.net.fc.cer;
ssl_certificate_key /etc/nginx/ssl/www.wpweixin.net.key;
ssl_session_timeout 1d;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers                EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets      on;
ssl_stapling      on;
ssl_stapling_verify      on;
resolver                 114.114.114.114 valid=300s;
resolver_timeout         10s;
### End of SSL config

然后测试配置文件并重启nginx即可:

查看源代码打印帮助

nginx -t && service nginx restart

acme.sh全自动续签证书

目前 Let’s Encrypt 证书的有效期是90天,官方推荐的方式是脚本自动化续签。acme.sh的实现方式是#全自动#,对,你不用进行任何设置,acme.sh会自动在80天后续签,一个键都不用敲!

acme.sh自动更新自身

Let’s Encrypt 一直处于高速发展的状态,每隔一段时间都会添加新的特性,而acme.sh也会随着官方不断更新,所以保持acme.sh更新是很有必要的,而acme.sh也提供了自动升级的功能:

  1. 手动升级:acme.sh --upgrade
  2. 自动升级:acme.sh --upgrade --auto-upgrade
  3. 关闭自动升级:acme.sh --upgrade --auto-upgrade 0

 

参考资料

  1. 官方简略教程:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E
  2. Let’s Encrypt证书快速申请并自动续期:https://www.gubo.org/lets-encrypt-quick-start-and-auto-renew/
  3. Mozilla SSL配置生成器:https://mozilla.github.io/server-side-tls/ssl-config-generator/

 

我的操作

  1. 验证域名
acme.sh  --issue -d www.wpweixin.net  \
--webroot  /data/wwwroot/www.wpweixin.net/
  1. 安装证书
acme.sh  --installcert  -d  www.wpweixin.net  \
--key-file /usr/local/nginx/conf/ssl/www.wpweixin.net.key  \
--fullchain-file /usr/local/nginx/conf/ssl/www.wpweixin.net.crt  \
--reloadcmd "service nginx force-reload"

以前上传的图片,文章中相关的URL并不是https,我们需要一键切换过去,这里需要安装一个插件:Really Simple SSL;安装启用即可全站https,记得让.htaccess文件可写。 到此为止就配置成功了。正规流程熟悉的话也就10分钟,立刻让你的WordPress网站高大上起来,让那些ISP流氓见鬼去吧。
如果你在配置Lets Encrypt配置中遇到不能解决的问题。请联系我们提供技术支持,我们提供HTTPS 收费技术服务,每个网站200元/次。不限于Lets Encrypt,其他SSL证书均可安装,包括阿里云和腾讯云的免费证书。


我们提供HTTPS安装服务,让WordPress更安全,让你的用户更信赖,你的WordPress更加专业。联系QQ:6347007


购买HTTPS安装服务¥200


立即加【QQ:6347007】试用WordPress支付插件

相关产品

  • Easy Digital Downloads 微信支付插件
    Easy Digital Downloads 微信支付插件

相关博客

  • 实现同一个服务器安装多个HTTPS WordPress网站的方法

  • WordPress微信视频直播插件即将发布