问题描述

今天在使用百度cdn的时候上传ssl证书一直解析不了

以前在别的云服务商上传证书的时候都是这么上传的,它们都可以解析,只有百度云解析不了。

原因

详细看了看证书上传的规则

1.证书扩展名一般为“.pem”,“.crt”或“.cer”,可在文本编辑器中打开证书文件。
2.证书 PEM 格式:以“-----BEGIN CERTIFICATE-----”作为开头, “-----END CERTIFICATE-----” 作为结尾。
3.如果证书文件包含多份证书,需要人为的将服务器证书与中间证书拼接在一起上传。规则:服务器证书+中间证书。
好吧,它说要中间证书,原来以前都没上传中间证书。因为我的web容器是apache,所以以前就下载了apache版本的证书压缩包,它给的文件有三个

  1. www.youdomain.cn_public.crt //公匙
  2. www.youdomain.cn_chain.crt //中间证书
  3. www.youdomain.cn.key //私匙
    以前在配置证书文件的时候只配了公匙和私匙,并没有配置中间证书,也没多大影响可以正常使用,百度云好像要求严格一点就必须配置中间证书。

解决问题

[scode type=“yellow”]提交ssl证书[/scode]
将中间证书复制追加在公匙的后面就可以解析了,提交证书至百度云成功。
[scode type=“yellow”]证书一致[/scode]
上面配置好了之后,接下来就是一个大坑了。由于在百度云配置的证书带了中间证书,在服务器配置的证书没有带中间证书,会出现两边的证书不一致。浏览器始终说中间的连接不是绝对的安全。这个时候CDN相当于中间人,没有证书文件不一致中间的连接就不安全。简单的画个图感受一下

中间的ssl证书和协议始终要保持一致。由于在服务器上面没有使用中间证书,CDN服务器和服务器之间的证书文件就不一样了。需要在服务器上面配置中间证书。

#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/httpd/conf/cert/4134938_www.summerpond.cn_public.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/httpd/conf/cert/4134938_www.summerpond.cn.key

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convinience.

SSLCertificateChainFile /etc/httpd/conf/cert/4134938_www.summerpond.cn_chain.crt

重启apache服务

systemctl restart httpd

这个时候服务器和CDN服务器用的证书就保持一致了。
[scode type=“yellow”]协议一致[/scode]
CDN设置回源协议为https

设置好了之后别忘记刷新CDN缓存,刷新一下就会出现久违的小锁了。

Q.E.D.