Let’s Encrypt 是一个免费的 SSL 推广项目,正式开放之时就一直想染指,也走了相当多的弯路,一度想放弃,但最终还是搞定了。这个绿色的小锁头真心来自不易,下面介绍一个不用做任何服务器配置,在阿里云 ACE 上实现 WordPress 的 HTTPS 的办法。
一、LINUX 环境
MAC 环境说是实验性的,所以装了个 Ubuntu 的虚拟机。然后将项目文件拿下来。
git clone https://github.com/letsencrypt/letsencrypt
二、独立 IP
电信拨号就有了,在路由上配置 NAT – DMZ,设置为 LINUX 环境的内网地址;然后将需要申请证书的域名解析 A 记录到该 IP。
三、生成证书
./letsencrypt-auto certonly --standalone --email [email protected] -d www.domain.com
如果报服务器无法访问客户端或者 DNS 错误,到 CloudXNS 申请一个免费域名 DNS。在域名管理后台自定义 DNS,然后在 CloudXNS 后台配置 A 记录。这里有个连接,可以检测国外访问的情况。
接着,顺利的话就可以看到如下提示。
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.xiaomac.com/fullchain.pem. Your cert will expire on 2016-04-01. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
四、证书上传
目录下会有四个 PEM 文件。其中 fullchain.pem
是证书文件,无需用 openssl
转化格式,直接重命名为 fullchain.crt
;privkey.pem
是密钥文件,也无需重新用 rsa
加密。这两个文件在阿里云后台绑定的域名那里上传即可。
到这里,网站已经可以用 HTTPS 来访问了。但若要全站统一为加密协议,还有一些工作要做。
五、wp-config.php
define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true); //define('WP_HOME','https://www.xiaomac.com'); //define('WP_SITEURL','https://www.xiaomac.com');
前面两行顾名思义就是强制登陆和后台都启用加密协议;后面两行是覆盖网站设置中的博客地址,即 home
和 siteurl
。因为调试过程中经常会有后台根本无法打开的问题,所以利用配置来实现会比较方便。当然,调试完成后,后台设置也可以这样保存起来,则这两行代码可去掉。
六、跳转
WordPress 的 is_ssl()
函数经常会不准,原来是大部分云主机都有负载均衡之类的优化导致此问题,可以用以下代码修复,同时也将非 HTTPS 的请求自动跳转:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){ $_SERVER['HTTPS'] = 'on'; }else{ header('Location:https://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]); exit(); }
七、伪静态配置(app.yaml)
rewrite: - url: /(.*).html script: /index.php last tryuri: - path: / script: /index.php
最后,该免费项目的证书有效期为三个月,到时重新操作一遍再续一次。