gpt4 book ai didi

java - 如何将 SSH 身份文件 key 对添加到 JKS keystore

转载 作者:搜寻专家 更新时间:2023-10-31 19:45:10 24 4
gpt4 key购买 nike

我正在构建的 Java 应用程序的任务之一是连接到远程 SFTP 服务器。为此,我拥有远程机器的证书和本地身份(.ssh 文件夹中的 id_rsaid_rsa.pub) .这工作正常。

我想将证书和身份放入受密码保护的 Java keystore 中,以便更轻松、更安全地进行配置。我有这个用于证书,但我在将 SSH 身份存储在 JKS 或 PKCS12 keystore 中时遇到问题(任何一个都可以)。

为了隔离问题,我尝试了以下步骤:

我使用 ssh-keygen -b 2048 在本地目录中创建两个身份文件 id_rsa_demoid_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 选项实现了它的 promise ,没有将我的公钥添加到 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 keystore 中?

最佳答案

假设您有一个如下所示的私钥:

id_rsa

-----BEGIN RSA PRIVATE KEY-----MIICWgIBAAKBgQCh3czej+KeEraesxts3xP6kx+cO/Fu8ROc/k4hSl7fO9jFZ6LmOsGlzsRsi8VDg9n/fh6iFng/Umgnfd4J0IiLQihSRYnvyOsqqXbIJ8mBtydqO4s+CjZLLDRSEMx3dw6GhFOcQ7xYYOeUMNY8QFidPn2LjURfMxG9XWOrCww8rwIBJQKBgGA+sSpjZCajV9P7yx4jxrCqgX99lnlREpSy4lj7ybUqgOQUG6t84dg1wOaYS8dHerOXGSIbMr3d+L2JHD0v4ntcKqzJm6Nf1FE27V0hvpzZl3fNax4NI/cIXM78zBx4lBblr5QMYnTSd5eADIcDy7TZHuScRPkPViQ2x9QPayQ9AkEA67lfOXFEJ8iTYHduykvj0Xqcs/peDX5nYXCEJ2XECxgxfKYVbQPazO5ACgp1VsgFMCsd4rDSwahOAgkErGfgCwJBAK/KFkSqMCLga8m19uqOftTQ+GhFc0O1lchWQ0A99+b9Rcs0yAe10GCNSbgrEmMuXEQS1emT6ZHM7KIh2P7kiG0CQQDSPYxH/TzJiWDZf0cjIRdMIT+ncJkS9DKw2flTkh2NWsRaap1858MleowkoYs/j81Gov76nbUNlhwPpy2uhiivAkByBor8G11+aA6QrWHkQMD4vuZReSgr62gTPt+DndE74o4i8c3bfNowyllU3asP5rhjgdbcsvheksMBYhA2ohNNAkAiKQdv08UAG77piJi09OFIEcetTiq/wy9Zeb6fmEuMFzsT2aR6x0d43OXqAgcKFgFuzqdXgxqhP/n9/eIqXdVA-----END RSA PRIVATE KEY-----

Do two things:

1) Create a certificate to wrap the key and expose the public key as a certificate, so that keytool understands it.

openssl x509 -signkey id_rsa -req -in example.req

2) 根据您的新请求创建一个自签名证书。

openssl x509 -signkey id_rsa -req -in example.req -out example.cer

然后,combine the certificate and private key , 并导入 keytool

cat example.cer id_rsa > example.full
keytool -import -keystore example.jks -file example.full

这将把 key 放在那里。使用私钥和公钥以及与您选择的 SSH/SFTP 库交互留作练习。

关于java - 如何将 SSH 身份文件 key 对添加到 JKS keystore ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31385944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com