- 我有一个运行 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/servers
[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 表示永久接受)。
有谁知道为什么我的脚本不起作用?在过去的几个月里,我一直很烦。
**编辑:**我花了一点时间才回到这一点,我听从了大卫的建议,但它仍然不起作用。现在错误是:
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)
问题是您的证书与服务器的主机名不匹配。您需要证书中的 CN 字段来匹配您的主机名。在您的情况下,您的主机名是“server”,证书的 CN 是“Tom”。您需要使用正确的 CN 值重新生成证书。
需要注意的一件事 - 许多 cron 作业使用不同的 HOME 运行(例如 /etc/crontab (cron.daily 等)设置 HOME=/),因此它具有不同的 .subversion 文件。只是在这里咬我们,有一个 /.subversion 树没有接受的证书。在 cron 脚本中正确设置 HOME 修复了它。
您是否尝试设置
ssl-trust-default-ca
为true
?我不知道是否能解决您的问题,但我在带有 Subversion 的版本控制一书中看到了这个建议。只需将其添加到参数中
有几个解决方案可以解决想到的问题。首先,您可以在 Apache 中创建一个不使用此证书(纯 http)的新 webdav 虚拟主机。或者,您可以对 cron 作业使用 svn+ssh 访问方法和私钥身份验证(可能存在安全风险)。
如果您无法解决证书问题,或者与 https webdav 访问无关,我只会走这条路。
你可以:
这个问题的答案帮助我组装了解决我遇到的类似问题所需的部分。这只是为像我这样的其他 linux 新手预先组装这些部件。
测试您通过 cron 运行的脚本
而不是我使用的
否则主目录和其他变量不会像 cron(root) 运行时那样
其次不要使用“--no-auth-cache”。如果添加该开关,您将永远无法永久接受证书。
使用上述方法,我能够通过 sudo su 运行一次脚本,永久接受证书,随后的 cron 运行正常。
您可以尝试手动验证证书:
把它放在你的脚本中:
config-dir 可以是您想要存储证书信息的任何位置。在从 cron 运行它之前,手动运行它并使用“p”永久接受证书。
一旦被接受,通过 cron 运行它,我相信它会像魅力一样工作。
还有一个选项(如果以前的选项无论如何都不起作用),这在其他环境中是有风险的,但在您的环境中,应该没问题。使用这样的脚本:
这将简单地接受证书而无需打扰。在生产环境中不建议这样做,因为这是一种安全风险,但在您使用自制证书的情况下,您可以使用它。
资料来源:GeekRide