【发布时间】:2015-10-01 20:52:02
【问题描述】:
我正在构建的 Java 应用程序的任务之一是连接到远程 SFTP 服务器。为此,我拥有远程机器的证书和本地身份(.ssh 文件夹中的id_rsa 和id_rsa.pub)。这工作正常。
我想将证书和身份放在受密码保护的 java 密钥库中,以便更轻松、更安全地进行配置。我有这个证书工作,但我在将 SSH 身份存储在 JKS 或 PKCS12 密钥库中时遇到问题(任何一个都可以)。
为了隔离问题,我尝试了以下步骤:
我使用ssh-keygen -b 2048 在本地目录中创建两个身份文件id_rsa_demo 和id_rsa_demo.pub。据我了解,这些是身份的私钥和公钥,所以我尝试将它们组合成一个identity.p12 文件:
openssl pkcs12 -export \
-inkey "id_rsa_demo" \
-in "id_rsa_demo.pub" \
-out "identity.p12" \
-password "pass:topsecret" \
-name "demoalias"
这给了我错误unable to load certificates。我四处搜索,似乎 openssl 需要一个带有完整链的证书 -in 参数。由于我生成的身份没有那个,我尝试了-nocerts 选项,如下所示:
openssl pkcs12 -export \
-inkey "id_rsa_demo" \
-in "id_rsa_demo.pub" \
-out "identity.p12" \
-password "pass:topsecret" \
-name "demoalias" \
-nocerts
我没有收到任何错误,但 -nocerts 选项兑现了它的承诺,并且没有将我的公钥添加到 pkcs12 文件中:
openssl pkcs12 -info -in identity.p12
Enter Import Password:
MAC Iteration 2048
MAC verified OK
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
friendlyName: demoalias
Key Attributes: <No Attributes>
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAOXpzckBb28CAggA
MBQGCCqGSIb3DQMHBAjPq9ibr445xQSCBMi5IlOk5F28kQPB5D97afiUb5d3It46
...
ejwYfHTj6bm+dEOUk68zNrWwKqwuJx5AZv3U8sm1cicVmh9W0HpL5tSmMMpDS1ey
Uos=
-----END ENCRYPTED PRIVATE KEY-----
有没有办法将 SSH 身份存储到 PKCS12 或 JKS 密钥库中?
【问题讨论】:
-
我发现了这个相关的问题,但我不想将它存储为密码字符串,这感觉很有趣。 stackoverflow.com/questions/6243446/…
-
我不太确定,但我认为 java 的密钥库(PKCS12 或 JKS 格式)旨在用于 SSL 通信。 SSL 通信使用比称为证书的公钥更完整的东西来验证实体。该证书嵌入了可分辨名称和其他内容,以初始化 2 个实体之间的 SSL 通信。我认为 SSL 和 SSH 之间存在混淆,我确信存储在密钥库中的信息可能会用于 SSH 通信。
-
您是在尝试使用现有的私钥,还是可以生成一个新的?
标签: java ssl ssh identity keystore