前一篇博文剛剛寫了《購買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年有效期,放到服務器上基本上就可以忘記還需要證書這回事了。👌
评论