Let’s Encrypt

LetsEncrypt

https_xiaomac_com

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 admin@domain.com -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.crtprivkey.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');

前面两行顾名思义就是强制登陆和后台都启用加密协议;后面两行是覆盖网站设置中的博客地址,即 homesiteurl。因为调试过程中经常会有后台根本无法打开的问题,所以利用配置来实现会比较方便。当然,调试完成后,后台设置也可以这样保存起来,则这两行代码可去掉。

六、跳转

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

最后,该免费项目的证书有效期为三个月,到时重新操作一遍再续一次。