在 Ubuntu 中保存 SVN 的 SSL 密码

在 Ubuntu 中保存 SVN 的 SSL 密码

我曾尝试以这种方式设置我的 SVN,以便它保存我的密码,但出于某种原因,它不起作用。我正在使用 SSL 证书,每次都需要为其提供密码。我曾尝试在 ~/.subversion/servers文件中进行设置:

[mygroup]
ssl-client-cert-file = /mnt/data/myuser/certificate.pk12
store-passwords = yes
store-plaintext-passwords = yes
store-ssl-client-cert-pp-plaintext = yes

文件是正确的,它找到了正确的路径并要求输入密码。以前我尝试过这个,它问我是否要永久存储 SSL 密钥和密码,我yes一直都输入。SSL 密钥被记住了,但密码没有。现在它甚至不要求记住它。它每次都只是询问。我尝试了很多设置,都没有用。有什么想法吗?谢谢

答案1

Subversion 1.8+ 中似乎存在一个错误/回归问题,无法存储证书密码。我在这里回答这个问题,希望有人会觉得它有用并节省一些时间。

一种解决方案是使用 kwallet 作为密码存储。这里有一个非常好的指南:http://mail-archives.apache.org/mod_mbox/subversion-users/201406.mbox/%[电子邮件保护]%3E。在此重新发布这些步骤,所有荣誉均归于原作者 - Simon。

根据您告诉我的内容,我能够找到一种解决方法并手动创建密码存储:

  1. .subversion/config:[auth] 部分设置为“password-stores = kwallet”
  2. 运行“kwalletmanager”,通过“系统托盘”打开kwallet
  3. 打开默认钱包并创建新的顶级“Subversion”文件夹(与表单数据、密码一起)
  4. 在 Subversion 文件夹中选择“密码”,然后使用键“@”+ path_to_p12 创建新密码,例如“@/home/nc/nc.p12”
  5. 在 kwallet 中输入此密钥的密码

观察 svn 尝试从“strace -e trace=lstat svn ls http://....”检索数据的位置,例如显示 /home/nc/.subversion/auth/svn.ssl.client-passphrase/345983d745d98273c095e872a09”

使用以下代码填充“345983d745d98273c095e872a09”文件:

K 15 svn:realmstring V 45 /home/nc/nc.p12 END

这可能会对某些人有所帮助。请注意,我的用户名是从证书通用名称派生出来的,否则我认为您需要“用户名@”作为密码密钥。


受上述解决方案的启发,我设法使其与 gnome-keyring 配合使用。大多数步骤相同:

.subversion/servers的内容:

store-auth-creds = yes 
ssl-client-cert-file = /mnt/data/myuser/certificate.pk12
ssl-authority-files = /some/path/to/CA_if_needed.pem
store-passwords = yes 
store-plaintext-passwords = no
store-ssl-client-cert-pp = yes 
store-ssl-client-cert-pp-plaintext = no

查找 svn 尝试读取的文件。对某些 svn 命令运行 strace,例如,strace svn up您应该会看到类似“/home/user/.subversion/auth/svn.ssl.client-passphrase/b97ec2acbc64a5c8634a2307cd100b13”的内容。使用以下内容创建该文件: 路径可能与您遇到的情况不同。另外,请确保用路径字符串的长度 K 15 svn:realmstring V 33 /mnt/data/myuser/certificate.pk12 END 替换。V 33

现在到了棘手的部分 - 手动将密码保存到 gnome-keyring 中。由于 seahorse 无法为我创建网络密码条目,因此我使用了一个很小的 ​​python 脚本。Debian/Ubuntu 用户需要“python-gnomekeyring”包才能使用此功能。

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import gnomekeyring

def hack():
    gnomekeyring.item_create_sync(None, gnomekeyring.ITEM_NETWORK_PASSWORD, "svn cert pwd", {"domain" : "/mnt/data/myuser/certificate.pk12"}, "Secret_Passphrase_Goes_Here", True)

if __name__ == '__main__':
    hack()

这将在默认钥匙串中创建一个网络密码。“域”必须与我们刚刚创建的 svn 配置中的证书路径匹配。

您可以使用 seahorse 检查一切是否成功。现在 subversion 应该能够从 gnome-keyring 读取,您不再需要每次都输入密码!

答案2

请按如下方式进行更改并检查。

~/.subversion/config文件中:-(更改为)

### Section for authentication and authorization customizations.
[auth]
### Set password stores used by Subversion. They should be
### delimited by spaces or commas. The order of values determines
### the order in which password stores are used.
### Valid password stores:
### gnome-keyring (Unix-like systems)
### kwallet (Unix-like systems)
### gpg-agent (Unix-like systems)
### keychain (Mac OS X)
### windows-cryptoapi (Windows)
password-stores = gpg-agent,gnome-keyring,kwallet
### To disable all password stores, use an empty list:
password-stores = yes
###
### Set ssl-client-cert-file-prompt to 'yes' to cause the client
### to prompt for a path to a client cert file when the server
### requests a client cert but no client cert file is found in the
### expected place (see the 'ssl-client-cert-file' option in the
### 'servers' configuration file). Defaults to 'no'.
ssl-client-cert-file-prompt = yes
###
### The rest of the [auth] section in this file has been deprecated.
### Both 'store-passwords' and 'store-auth-creds' can now be
### specified in the 'servers' file in your config directory
### and are documented there. Anything specified in this section
### is overridden by settings specified in the 'servers' file.
store-passwords = yes
store-auth-creds = yes

### Section for configuring external helper applications.

~/.subversion/servers文件中:-(更改为)

[global]
# http-proxy-exceptions = *.exception.com, www.internal-site.org
# http-proxy-host = defaultproxy.whatever.com
# http-proxy-port = 7000
# http-proxy-username = defaultusername
# http-proxy-password = defaultpassword
# http-compression = no
# No http-timeout, so just use the builtin default.
# No neon-debug-mask, so neon debugging is disabled.
# ssl-authority-files = /path/to/CAcert.pem;/path/to/CAcert2.pem
#
# Password / passphrase caching parameters:
store-passwords = yes
store-ssl-client-cert-pp = yes
# store-plaintext-passwords = no
# store-ssl-client-cert-pp-plaintext = no

相关内容