我设法在Win上设置SVN(通过SSL)服务器和TortoiseSVN客户端。
我为testing项目做了一个Post-Commit Hook。 后提交将更新网页目录,使PHP中的应用程序可以用最新版本执行。
这一切都在壳上完成。 唯一的问题是,当我在Win中对客户端进行更改时,提交的更改已提交,但HOOK引发错误
post-commit hook failed (exit code 1) with output: Error validating server certificate for 'https://SERVER_IP:443': - 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: DEVSRVR - Valid: from Fri, 28 Jan 2011 09:22:45 GMT until Sat, 28 Jan 2012 09:22:45 GMT - Issuer: PHP, SS, SS, SRB - Fingerprint: 5f:d0:50:d6:dd:a6:d4:64:a5:ac:3a:4b:7c:7d:33:e3:75:dd:23:9f (R)eject, accept (t)emporarily or accept (p)ermanently? svn: OPTIONS of 'https://SERVER_IP/svn/myproject/trunk': Server certificate verification failed: certificate issued for a different hostname, issuer is not trusted (https://SERVER_IP)
这是SVN在使用不信任的证书时的默认行为。 看看“ 使用Subversion进行版本控制 ”中的SSL证书pipe理部分。
如果客户端收到服务器证书,则需要validation它是否信任该证书:服务器是否真的是自称的服务器? OpenSSL库通过检查服务器证书或authentication机构(CA)的签署者来执行此操作。 如果OpenSSL无法自动信任CA,或者发生其他问题(如证书过期或主机名不匹配),则Subversion命令行客户端将询问您是否要信任服务器证书。
这个对话应该看起来很熟悉 它基本上是你可能看到来自你的web浏览器(这只是另一个像Subversion的HTTP客户端)的问题。 如果您select(p)ermanent选项,则服务器证书将caching到您的专用运行时授权/区域中,方法与caching用户名和密码的方式相同(请参阅“客户端证书caching”一节)。 如果caching,Subversion将在以后的谈判中自动信任这个证书。
看起来解决办法是手动运行它,让它永久接受证书,或者在configuration中将ssl-trust-default-ca为true。
许多OpenSSL安装还有一组预定义的“默认”CA,这些CA几乎都是可信的。 为了使Subversion客户端自动信任这些标准权限,请将ssl-trust-default-cavariables设置为true。
正如@ runlevel6所说的,你必须接受与运行钩子的用户相同的证书。
如果由于某种原因,你有权限编辑钩子,但不能运行命令,因为这个用户试着把钩子中的svn命令暂时改为:
echo "p" | svn command_that_shows_the_error
如果你没有一个明确的svn命令在钩子使用这个:
echo "p" | svn info http://repositoryurl
然后运行一次,以便永久接受证书。 我不得不这样做一次,因为一个cron作业,删除了authenticationcaching,它的工作。