如何使用Subversion信任过期的SSL证书?

时间:2015-07-21 16:27:26

标签: svn ssl

请考虑以下情形。旧的SVN服务器,可通过HTTPS访问,已移至另一个域(没有新证书)且证书已过期。我对这种情况感到困惑,因为我对远程端没有任何影响。

同样,我仍然坚持使用Scientific Linux 6.3附带的Subversion客户端版本:

$ svn --version
svn, version 1.6.11 (r934486)
   compiled Feb 10 2015, 17:07:04

我知道--non-interactive --trust-server-cert,但它没有帮助,尽管文档表明这些应该可用并且在Subversion 1.6版本中工作。它给我的错误是:

svn: OPTIONS of 'https://svn.company.tld/svn/project/trunk': Server certificate verification failed: certificate has expired, certificate issued for a different hostname, bad certificate chain (https://svn.company.tld)

当我以交互方式运行时,我只接受暂时接受证书或拒绝。因此,所有建议以交互方式运行一次然后以非交互方式运行的好方法对我来说都没有好处。事实上,这就是我总是在使用Ubuntu的新Subversion客户端上做到这一点。我得到的是这个(编辑):

Error validating server certificate for 'https://svn.company.tld:443':
 - The certificate hostname does not match.
 - The certificate has expired.
 - The certificate has an unknown error.
Certificate information:
 - Hostname: *.oldcompanyname.tld
 - Valid: from Tue, 02 Jun 2009 00:00:00 GMT until Wed, 06 Jul 2011 23:59:59 GMT
 - Issuer: www.digicert.com, DigiCert Inc, US
 - Fingerprint: fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd:fd
(R)eject or accept (t)emporarily?

暂时接受允许我缓存凭据和所有凭据,但它会再次提示暂时信任该证书,或者拒绝它从它从远程服务器提取的每个修订

所以这对我来说是不可取的,因为我至少需要它自动化。

我还调整了~/.subversion/servers以包含:

[global]
ssl-authority-files = /home/username/.subversion/cacert-svn.pem

其中PEM文件包含来自以下openssl调用的输出的已编辑内容(仅实际证书块):

openssl s_client -showcerts -connect svn.company.tld:443 < /dev/null > cacert-svn.pem

尝试将这些证书拆分为单个文件并将它们列在以分号分隔的列表中(文档不清楚单个PEM文件是否可以包含Subversion的多个证书,I知道Apache的工作原理)。这些都不起作用。

我还尝试将~/.subversion文件夹从svn, version 1.8.8 (r1568071)移植到Scientific Linux。这也失败了。

我如何说服这个给定的Subversion客户端接受这个特定证书永久,尽管已经过期并且是针对不同的主机名发出的?

我读过的东西,并没有帮助,因为它不适用于我的Subversion客户端或其他:

1 个答案:

答案 0 :(得分:0)

您可以使用以下svn选项:

--trust-server-cert-failures=unknown-ca,cn-mismatch,expired,not-yet-valid,other

那它不再问了吗?案例。