前一篇博文刚刚写了《购买Cloudflare的高级SSL证书管理器》,其中说到这种高级证书只能在Cloudflare中绑定使用,无法下载放在源服务器使用。
如果要让CDN使用“完全并严格的SSL加密模式”,端到端加密,服务器上就需要有受信任的 CA 证书或 Cloudflare Origin CA 证书。我们以前源站采用的是前者,也就是受信任的CA证书,一直使用Let's Encrypt在服务器上生成的免费域名证书。
因为我们购买云服务器的时间比较早,当时采用CentOS 6.x现在已经过时了,上面安装的certbot也是很老的版本无法升级,不能生成通配符域名证书,所以使用起来也不太方便。这种老版本certbot一般是采用http文件认证,前些天我们采用Cloudflare的批量重定向功能降低源服务器负载后,会让一些子域名下所有路径全部都跳转到其它地方,造成文件认证需要的.well-known目录下文件无法访问,因此造成源站SSL证书过期无法更新。
不过,可以采用Cloudflare提供的源证书服务,生成由 Cloudflare 签名的免费 TLS 证书,以安装在源服务器上。源证书仅对 Cloudflare 与源服务器之间的加密有效。截图如下:
相关介绍:
可以免费创建多个证书,每个证书可以包含多条域名,支持多级通配符域名。
创建过程很简单,我就不截图了,注意生成证书后,可以马上把私钥复制并妥善保存(例如命名为:jamesqi.com.key),后面这个私钥就无法在网站上获取了,只能下载源证书(例如命名为:jamesqi.com.cert)。
把私钥和证书文件上传到源服务器上,修改Apache的httpd-ssl.conf文件中的配置,例如:
<VirtualHost *:443> DocumentRoot "/www-path/jamesqi.com" ServerName jamesqi.com ServerAlias a.jamesqi.com ServerAlias b.c.jamesqi.com ServerAdmin webmaster@jamesqi.com SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile "/cloudflare-origin-ca-certificates/jamesqi.com.cert" SSLCertificateKeyFile "/cloudflare-origin-ca-certificates/jamesqi.com.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/www-path/jamesqi.com"> SSLOptions +StdEnvVars AllowOverride All </Directory> </VirtualHost>
这样重启Apache后,这个源站证书就可以起作用了,用户访问CDN的通用SSL证书,不用管CDN到源站之间的证书。
百度云加速以前是与Cloudflare合作关系,采用了Cloudflare的一些技术,我尝试了一下,Cloudflare生成下载的源服务器证书放置在百度云加速代理的站点上,同样是可以设置SSL加密模式为“完全(严格)”。
但如果把源站证书当作通用SSL证书来直接访问不通过CDN代理的站点,浏览器中就会出现证书错误的提示,如下图:
当然,这个证书本来也不是为通用SSL证书设计的。
生成证书的时候可以选择最长15年有效期,放到服务器上基本上就可以忘记还需要证书这回事了。👌
评论