当前位置

使用Cloudflare的源服务器证书

James Qi 在 2022年8月30日 - 16:46 提交

前一篇博文刚刚写了《购买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 与源服务器之间的加密有效。截图如下:

Cloudflare的源服务器SSL证书

相关介绍:

可以免费创建多个证书,每个证书可以包含多条域名,支持多级通配符域名。

创建过程很简单,我就不截图了,注意生成证书后,可以马上把私钥复制并妥善保存(例如命名为: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代理的站点,浏览器中就会出现证书错误的提示,如下图:

Cloudflare源站证书不能公开访问

当然,这个证书本来也不是为通用SSL证书设计的。

生成证书的时候可以选择最长15年有效期,放到服务器上基本上就可以忘记还需要证书这回事了。👌

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。