我正在运行 RedHat Enterprise Linux 6,并安装了 subversion 服务器(使用 Apache)。我刚刚将 Apache 配置为使用 Geotrust 的 SSL 证书运行 HTTPS。Apache 部分运行良好(我可以通过 HTTPS 访问我的网站,没有任何警告或问题)。
但是,当我运行时svn co https://myserver.com/svn/proj_name
,出现以下错误:
Error validating server certificate for 'https://myserver.com:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: myserver.com
- Valid: from Sun, 23 Oct 2011 16:15:13 GMT until Thu, 25 Oct 2012 05:38:36 GMT
- Issuer: GeoTrust, Inc., US
- Fingerprint: (some fingerprint)
(R)eject, accept (t)emporarily or accept (p)ermanently?
另外,我的 Subversion“服务器”配置文件中有:
[global]
ssl-authority-files=/usr/share/certs/GeoTrust_Primary_CA.pem;
ssl-trust-default-ca = true
但是当我尝试访问 subversion 时,我在错误日志中发现了这一点:
svn: Invalid config: unable to load certificate file '/usr/share/certs/GeoTrust_Primary_CA.pem'
每个人都有此文件的读取权限 - 并且我直接从 GeoTrust 网站下载了它。我是不是遗漏了什么?
答案1
最有可能的是,证书文件有问题。您可以使用以下命令检查:
openssl x509 -text < /usr/share/certs/GeoTrust_Primary_CA.pem
输出应该包括:
Version: 3 (0x2)
Serial Number:
18:ac:b5:6a:fd:69:b6:15:3a:63:6c:af:da:fa:c4:a1
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
Validity
Not Before: Nov 27 00:00:00 2006 GMT
Not After : Jul 16 23:59:59 2036 GMT
Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
Subject Public Key Info:
或者
md5sum /usr/share/certs/GeoTrust_Primary_CA.pem
输出应为:55a9909182b959dcbb00c550725bcdf2 GeoTrust_Primary_CA.pem
答案2
需要检查以下几件事:
- 确保受信任的根确实是您的证书信任链的根。
只需在浏览器中启动您的 SVN 站点并检查证书路径,返回到根目录 - 确保根的指纹与您拥有的文件相匹配。
并将证书导出到 x509,为第二步做准备:
- 让 Apache 踢出一直回到根目录的证书的完整路径。
如果 Apache 没有提供中间件,SVN 客户端就无法推断中间件。
您需要一个SSLCertificateChainFile
指令,指向包含 x509 证书链的文件(而不是您自己的证书,它应该在SSLCertificateFile
):
-----BEGIN CERTIFICATE-----
(intermediate certificate's base64 data here)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root certificate's base64 data here)
-----END CERTIFICATE-----
一旦完成,请验证 Apache 是否使用 发送了整个链openssl s_client -connect myserver.com:443 -showcerts
。