【wordpress】阿里云免费DV SSL证书+全站https

需求场景:

本站早在建站之初就跟随潮流启用了站点的https协议,无奈当时申请的SSL证书是startcom的已经被多方拉入黑名单,目前已经停止发放,造成的结果就是苹果手机等一些浏览器屏蔽我的https站点,所以一直以来就开启了http和https两种直接访问方式,后面也没有过多折腾,这次更换工作,迁移了站点,做了不小改动,借此把SSL证书的遗留问题折腾起来。

配置https,确认环境允许的情况下,首先要考虑自然就是选择哪家的SSL/TLS CA证书,作为一个个人小站点,第一准则就是必须免费的 /坏坏 。开始大嘴想选择“Let's Encrypt”一个公共且免费SSL的项目,口碑非常不错,但是无奈在安装过程中总是报解析错误,折腾半天无果,考虑可能是本地主机监听服务端口做了DNAT的原因最终放弃。由于大嘴域名是从阿里购买,作为业界牛逼的大佬,阿里自然有相应的产品,这里大嘴最终便选用了阿里的云盾证书的一款免费证书—— Symantec的免费型DV SSL。

♥阿里云免费DV SSL证书+全站https

一、申请阿里免费DV SSL证书

如上图所示,我们找到阿里控制台云盾证书服务界,选择此类型的证书,立即购买即可,为期一年。

返回我的证书,找到刚才购买的证书,在进度一栏选中“补全”,按照订单进度流程进行证书审核申请。

接下来就是填写证书申请的相关信息,按照引导填写即可,最终完成状态如上图“已签发”,并下载证书。

这里博主是lamp的apache环境,所以下载适用apache的证书文件,如下图:

可以直接参考阿里提供资料:填写审核资料步骤

其中在申请证书时需要填写粘贴csr文件内容,因为我这里是需要线下自己使用,所以需要自己生成私钥key文件和证书申请密钥csr文件,生成的方法大嘴这里使用的是openssl工具。

openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout server.key -out server.csr

执行命令生成CSR文件。其中:

  • -new 指定生成一个新的CSR。
  • -nodes 指定私钥文件不被加密。
  • -sha256 指定摘要算法。
  • -keyout 生成私钥文件。
  • -newkey rsa:2048 指定私钥类型和长度。

生成文件后,“cat server.csr”查看证书申请密钥文件内容并复制粘贴到申请信息页面。当然也可以使用keytool工具生成密钥文件。

以上可以参考阿里提供资料:如何制作CSR文件

思考

①、阿里云密钥为什么要使用无密码保护的私钥?

阿里云其它云产品在使用数字证书的过程中需要您提供私钥,如果您的私钥是加载密码保护的,那么其它云产品在加载您的数字证书时将无法使用您的私钥,可能导致数字证书解密失败,HTTPS服务失效。因此,需要您提供无密码保护的私钥以及用此私钥生成的CSR文件。

可以使用如下命令清除私钥密码保护:

openssl rsa -in server.key -out unencryed.key

也可参考阿里提供资料:密钥为什么要使用无密码保护的私钥

②、什么是公钥和私钥

公钥和私钥就是俗称的不对称加密方式。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。
通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,则必须用另一个密钥才能解密。比如用公钥加密的数据就必须用私钥才能解密,如果用私钥进行加密也必须用公钥才能解密,否则将无法成功解密。

③、数字证书的原理

数字证书采用公钥体制,即利用一对互相匹配的密钥对进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。数字证书是一个经证书授权中心(CA)数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。

二、配置apache https SSL证书

下载好了证书,是一个****.pem的文件。

上传到生成密钥的目录,直接mv重命名crt后缀即可:

# mv 1413432512351.pem server.crt

把crt和之前生成的key、csr文件一起放在apache的配置的conf目录下。

因为站点http服务是部署在普通用户下,配置一下文件的权限:

# chown oxblog:oxblog server.*
# chmod 644 server.*

再apache的配置文件httpd.conf中启用ssl模块并引用ssl配置文件:

#vim httpd.confLoad
Module ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

然后在apache的SLL配置文件httpd-ssl.conf中配置https监听443服务:

<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/opt/apache/htdocs"
ServerName oxblog.cn
ServerAdmin you@example.com
ErrorLog "/opt/apache/logs/error_log"
TransferLog "/opt/apache/logs/access_log"
SSLEngine on
......

再配置引用证书密钥文件的参数:

(在上面的虚拟主机配置标签内,也可以直接找到下面参数修改):

# vim ../extra/httpd-ssl.conf
......
SSLCertificateFile "/opt/apache/conf/server.crt"
SSLCertificateKeyFile "/opt/apache/conf/server.key"
......

最后重启下httpd服务即可:

# service httpd -k stop
# service httpd -k start

到此,如果不出意外,恭喜您,您的小站已经可以https访问了。

三、全站https及SSL优化。

上面虽然我们开启了https协议的服务,但是http仍然可以访问,但如果我们关闭了http服务,对一些搜索引擎,或是某IE浏览器,对https并不是很友好,另外很多人在直输站点url的时候并不会习惯敲打https头的,所有很多时候还是有必要提供http服务的角色,但又想全站只能都走https的传输协议,如此我们有必要做一些配置:

①、启用wordpress的后台强制https

因对大嘴站点使用的wordpree搭建,对于wp来说有两个参数,可以让登陆页面和后台管理强制走https协议。

vim wp-config.php
/** Sets up WordPress vars and included files. */
define('FORCE_SSL_ADMIN', true); <强制后台https>
define('FORCE_SSL_LOGIN', true); <强制登陆https>
define('WP_POST_REVISIONS', 5); <允许登陆错误重试5次>

②、后台配置常规选项配置wp-url和站点url为https的

如此很多wp页面调用url函数的内链才是https的超链接,配置如下图:

老版本上可能还要修改多媒体的上传路径和URL为https,目前新版本则不用了。

③、检查主题文件是否有http开头的超链接

可以进入主题目录,使用grep命令检测一下:

#grep -ri http: ./

当然不是所有的http都要修改,如果是外部链接的,斟酌处理即可,但凡支持https,都尽量更改一下。

④、http重定向到https实现全站https

为了解决上述问题,可以做301重定向,如此当朋友访问http的url时,会自动跳转到https协议,从而实现全站https。

要做重定向有很多种方法,常见的主要有两种:Apache模块 mod_alias的 Redirect 和 RedirectMatch命令、使用mod_rewrite重写URL方式。

前两种方法都很简单,直接在httpd.conf文件中添加即可。(也可以写到.htaccess文件中)

博主这里就使用的如下代码:(注意"https://oxblog.cn/"的最后一个"/"一定不要忘记)

Redirect permanent "/" "https://oxblog.cn/"

当然也可以如下:(permanent也可以写成301)

RedirectMatch permanent ^/(.*) https://oxblog.cn/$1

下面是重写URL的方式:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
思考

重写规则为什么要options +followsymlinks  ?

在 某些服务器配置中,mod_rewrite要求有followsymlinks,否则会显示500内部服务器错误。在任何情况下,只要您没有指定FollowSymLinks的选项(即Options FollowSymLinks),或者指定了SymLinksIfOwnerMatch选项,Apache将不得不调用额外的系统函数来检查符号链接。每次针对文件名的请求都将触发一次检查。
如果你没有使用followsymlinks规则而网站访问正常,说明你的服务器配置已经默认调用followsymlinks的重写规则,你无需再为你的htaccess文件定义了。但在有些服务器500 Server Error之后的错误日志中提示需要定义SymLinks使得rewrite重写规则起作用。

⑤、禁用ssl2、ssl3、tls1.0、tls1.1版本

为了提高PCI DSS支付卡行业安全标准以及使用更安全的协议,目前注意使用的是TLS1.2和TLS1.3版本。

ssl2、ssl3、tls1.0、tls1.1几个版本目前来说已经是不安全的,需要从配置中排除:

#vim httpd-ssl.conf
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

除此之外我们还可以排除几个不安全的加密算法套件:

SSLCipherSuite ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL

配置完以上,记得重启httpd服务哦。更多安全加固,可以参考:

(今天的分享就到这里,如果您有高见或好的分享,记得留言哦!)


原创文章,转载请注明:转自于公牛博客

本文链接地址:【wordpress】阿里云免费DV SSL证书+全站https

13
祝福我们的祖国繁荣昌盛
  • 请尽情挥洒您的笔墨!
      D

      @鸟叔 /害羞 /害羞 嗯呢,lets确实很好用,而且可以配置自动续期永久生效,本来是要使用它的,总是报错,下次再研究 /不错

      2018-07-13 18:52回复

    欢迎来到公牛博客更多分享更多精彩记录美丽点亮生活

    公牛博客·统计碑运行:2820 D
    博文:212 P
    评论:1872 S