svn 不会接受我的无效证书

svn 不会接受我的无效证书
  • 我有一台运行 apache 的服务器,带有自签名证书(服务器),其中已挂接了 subversion
  • 它需要用户名来从 repo 中检出或更新。
  • 我从 repo 中签出了一个文件,我正尝试在两台服务器上的 cron 作业上更新它:服务器和客户端。由于相同的原因,这两个 cron 作业都无法工作(我在两台服务器上的设置几乎相同,但客户端更简单)。
  • 以下是客户端,只有一个登录名:root(我知道,请不要嘲笑我)
  • 如果你认为这很重要的话,它们都是 gentoo

错误

Error validating server certificate for 'https://server: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: Tom
 - Valid: from Sun, 01 Feb 2009 03:51:25 GMT until Tue, 01 Feb 2011 03:51:25 GMT
 - Issuer: Fake Company, NYC, New York, US
 - Fingerprint: fingerprint here

   (R)eject, accept (t)emporarily or accept (p)ermanently? 
svn: OPTIONS of 'https://server/svn/repo': Server certificate verification failed: certificate issued for a different hostname, issuer is not trusted (https://server)

我知道这一切。这就是为什么我遵循所有指南让 svn 自动接受证书的原因:

/root/.subversion/服务器

[global]
ssl-authority-files = /root/scripts/server.crt

/root/scripts/server.crt

-----BEGIN CERTIFICATE-----
MIIDejCCAmICCQDibo0twimetjANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJV
UzERMA8GA1UECBMITmV3IFlvcmsxDDAKBgNVBAcTA05ZQzEjMCEGA1UEChMaSGFw
et al
-----END CERTIFICATE-----

/root/scripts/backup.sh

svn up /BACKUP/checkouts/server/ --username tom

并且该命令以 root 身份正常运行(无需 sudo,直接以 root 身份运行),无需提示确认证书(以前有过,但我选择 p 表示永久接受)。

有人知道为什么我的脚本不起作用吗?过去几个月它一直困扰着我。

**编辑:**我花了一点时间才解决这个问题,我按照 David 的建议做了,但还是不行。现在的错误是:

Error validating server certificate for 'https://server:443':
 - The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: server
 - Valid: from Sat, 20 Jun 2009 14:10:45 GMT until Mon, 20 Jun 2011 14:10:45 GMT
 - Issuer: Fake Company, New York, US
 - Fingerprint: 1a:c6:9c:eb:62:9e:e1:05:d9:d3:ac:01:f4:35:dc:00:14:48:e5:39
(R)eject, accept (t)emporarily or accept (p)ermanently? svn: OPTIONS of 'https://server/svn/folder': Server certificate verification failed: issuer is not trusted (https://server)

答案1

验证“https://”的服务器证书时出错服务器:443':
 - 该证书不是由受信任的机构颁发的。请使用
   指纹手动验证证书!
 - 证书主机名不匹配。
证书信息:
 - 主机名:汤姆
 - 有效期:2009 年 2 月 1 日星期日 03:51:25 GMT 至 2011 年 2 月 1 日星期二 03:51:25 GMT
 - 发行人:Fake Company,NYC,纽约,美国
 - 指纹:此处输入指纹

问题是您的证书与服务器的主机名不匹配。您需要证书中的 CN 字段与您的主机名匹配。在您的例子中,您的主机名是“server”,证书的 CN 是“Tom”。您需要使用正确的 CN 值重新生成证书。

答案2

需要注意的一点是 - 许多 cron 作业使用不同的 HOME 运行(例如 /etc/crontab(cron.daily 等)设置 HOME=/),因此它具有不同的 .subversion 文件。我们在这里遇到了麻烦,有一个没有接受证书的 /.subversion 树。在 cron 脚本中正确设置 HOME 可以解决这个问题。

答案3

您是否尝试过设置ssl-trust-default-catrue?我不知道这是否能解决您的问题,但我看到了以下建议使用 Subversion 进行版本控制书。

许多 OpenSSL 安装还具有一组预定义的“默认”CA,这些 CA 几乎受到普遍信任。要使 Subversion 客户端自动信任这些标准颁发机构,请将变量设置 ssl-trust-default-catrue

答案4

有几个解决方案可以解决这个问题。首先,您可以在 Apache 中创建一个不使用此证书(纯 http)的新 webdav 虚拟主机。或者,您可以对 cron 作业使用 svn+ssh 访问方法和私钥身份验证(可能存在安全风险)。

如果您无法解决证书问题,或者不受 https webdav 访问限制,我才会选择这条路线。

相关内容