当使用https://形式的URL连接Apache时,Subversion客户端将会受到两个类型的响应:
1、一个服务器证书
2、一个针对客户端证书的请求
在本人的应用场景主要涉及SVN仓库迁移的操作,需要将大量的远程仓库集中迁移到本地仓库进行管理。所以这里主要描述服务器证书相关的问题,因为需要使用脚本执行Subversion的svnrdump命令,在执行的过程中碰到如下提示信息:
Error validating server certificate for 'https://...:端口号':
The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
The certificate hostname does not match.
Certificate information:
Hostname: ..cn
Valid: from Wed, 29 Nov 2017 01:24:36 GMT until Sat, 27 Nov 2027 01:24:36 GMT
Issuer: CMBAUTOTEST01TS.ho18t.cmbchina.cn
Fingerprint: cf:1f:c4:f0:9e:a3:42:0f:75:23:50:56:54:6e:11:71:df:a7:d3:9f
(R)eject, accept (t)emporarily or accept (p)ermanently?
在这里可以看到两个错误提示,第一个错误提示可以通过在命令行中添加参数“--trust-server-cert --non-interactive”(查询svnrdump命令相关的文档)解决,第二个错误是由于hostname不相同导致的。
导致这个问题的原因是:证书返回的Hostname是一个域名,但是验证时使用的是ip地址。
在这里使用的解决方法是:将https://连接中的ip地址替换为服务器返回的证书中的Hostname,然后在机器的hosts文件中添加ip与Hostname的关联映射。这样就可以保证脚本自动执行的过程中不会被“Hostname does not match”中断。
关于subversion的命令说明请参考官方文档:svnbook.red-bean.com/nightly/zh/svn.ref.html