如果需要客户端证书,Xcode 4 SVN挂在“签出”

时间:2011-05-13 05:42:07

标签: xcode svn xcode4

我试图让Xcode 4与我的svn存储库一起工作。我输入svn地址,它说是可以访问的,但是当我尝试检出时,它会出现“服务器'svn.testbedapp.com'需要客户端证书。” (它没有提供提供证书的选项),然后它显示“使用固定轮无限期地检出'ProjectName'。

我是如何提供证书或让它检查出来的?

3 个答案:

答案 0 :(得分:12)

这是一个众所周知的问题。

打开终端,输入

svn ls <your repository address>

确认证书,检查登录/通过。 之后repo在xcode中工作正常。

答案 1 :(得分:1)

您可以将证书文件名放入SVN配置文件

 ~/.subversion/servers

[global] 部分中添加一行(使用完整路径 - 不是相对路径)

ssl-client-cert-file = /path/to/your/certificate.p12

您也可以选择添加

ssl-client-cert-password = yourpassphrase 
store-passwords = yes
store-ssl-client-cert-pp = yes**

答案 2 :(得分:0)

回答原来的问题:

服务器“foo.example.com”需要客户端证书。

翻译:Xcode无法在您的钥匙串中找到SSL客户端证书,证书无效,或者如果有多个证书,Xcode不知道使用哪一个。

在钥匙串中安装证书:在Finder中,打开包含客户端证书的文件(通常为.p12文件)。单击“添加”,然后输入密码以解密.p12文件。如果您有相应的根证书(通常是.pem文件),也可以将其导入,并在出现提示时单击“始终信任”。

要确保证书有效:在Keychain Access中,选择客户端证书并查找绿色复选标记和“此证书有效”字样。

  • 如果您看到“此证书是由未知机构签署的”, 安装相应的根证书。
  • 如果您看到“此证书由不受信任的颁发者签名”,请查找“发布者”的位置,按该名称查找相应的根证书,并将根证书标记为受信任(至少对于X.509)基本政策)。
  • 如果您看到“此证书已过期”,请将其删除并获取新证书。

要将网址与特定证书相关联:您需要一个身份首选项。 Xcode无法做到这一点,但Keychain Access和Safari都可以。在Keychain Access中,选择客户端证书,然后选择“文件”菜单&gt;新身份偏好......输入存储库URL(例如https://foo.example.com/path/to/repository),然后单击“添加”。

或者:在Safari中,转到您的存储库URL。如果安装了多个证书,Safari将提示“网站”foo.example.com“需要客户端证书”并显示证书列表。选择您在步骤(1)中安装的那个。


要使一切正常,您还需要克服这两个常见错误:

客户端证书文件名:身份验证领域:https://foo.example.com:443

翻译:Subversion无法在磁盘上找到您的SSL客户端证书。

Xcode使用Keychain,Subversion本身(从v1.4开始)也使用Keychain进行密码。但是,对于证书,必须将Subversion指向磁盘上的文件。

1)在您喜欢的文本编辑器中打开~/.subversion/servers。在底部,添加行

ssl-client-cert-file = /path/to/first.last.p12

其中值是PKCS#12格式的客户端证书的路径。

svn:“https://foo.example.com/path/to/repository”的选项:SSL握手失败,请求了客户端证书:SSL错误:sslv3警报握手失败

翻译:Subversion无法找到解密SSL客户端证书的密码。

见上面的解释。

要在钥匙串中保存.p12密码:在终端中,输入

svn ls https://foo.example.com/path/to/repository
  • 出现提示时,输入.p12文件的密码。这将作为应用程序密码存储在您的钥匙串中。
  • 出现提示时,输入Mac的管理员密码。
  • 出现提示时,输入您的服务器凭据。这也将作为应用程序密码存储在您的钥匙串中。

此时,您应该会在终端中看到存储库的内容。

注意:如果您使用Black Pixel版本,至少v1.2.2似乎无法使用Keychain进行密码,因此在~/.subversion/servers中您还需要添加该行

ssl-client-cert-password = yourpassword

您的密码是明文。 (这显然不安全,所以除非必须这样做,否则不要这样做。)