簡體   English   中英

如何將SSH身份文件密鑰對添加到JKS密鑰庫

[英]How to add SSH identity file keypair to JKS keystore

我正在構建的Java應用程序的任務之一是連接到遠程SFTP服務器。 為了做到這一點,我有遠程機器的證書和本地身份( .ssh文件夾中的id_rsaid_rsa.pub )。 這工作正常。

我想將證書和身份放在受密碼保護的java密鑰庫中,以便更容易和更安全地配置。 我有這個工作的證書,但我遇到了在JKS或PKCS12密鑰庫中存儲SSH身份的問題(任何一個都可以工作)。

為了隔離問題,我嘗試了以下步驟:

我使用ssh-keygen -b 2048在te本地目錄中創建兩個身份文件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選項符合其承諾,並且不會將我的公鑰添加到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密鑰庫中?

假設您有一個如下所示的私鑰:

id_rsa

-----BEGIN RSA PRIVATE KEY-----
MIICWgIBAAKBgQCh3czej+KeEraesxts3xP6kx+cO/Fu8ROc/k4hSl7fO9jFZ6Lm
OsGlzsRsi8VDg9n/fh6iFng/Umgnfd4J0IiLQihSRYnvyOsqqXbIJ8mBtydqO4s+
CjZLLDRSEMx3dw6GhFOcQ7xYYOeUMNY8QFidPn2LjURfMxG9XWOrCww8rwIBJQKB
gGA+sSpjZCajV9P7yx4jxrCqgX99lnlREpSy4lj7ybUqgOQUG6t84dg1wOaYS8dH
erOXGSIbMr3d+L2JHD0v4ntcKqzJm6Nf1FE27V0hvpzZl3fNax4NI/cIXM78zBx4
lBblr5QMYnTSd5eADIcDy7TZHuScRPkPViQ2x9QPayQ9AkEA67lfOXFEJ8iTYHdu
ykvj0Xqcs/peDX5nYXCEJ2XECxgxfKYVbQPazO5ACgp1VsgFMCsd4rDSwahOAgkE
rGfgCwJBAK/KFkSqMCLga8m19uqOftTQ+GhFc0O1lchWQ0A99+b9Rcs0yAe10GCN
SbgrEmMuXEQS1emT6ZHM7KIh2P7kiG0CQQDSPYxH/TzJiWDZf0cjIRdMIT+ncJkS
9DKw2flTkh2NWsRaap1858MleowkoYs/j81Gov76nbUNlhwPpy2uhiivAkByBor8
G11+aA6QrWHkQMD4vuZReSgr62gTPt+DndE74o4i8c3bfNowyllU3asP5rhjgdbc
svheksMBYhA2ohNNAkAiKQdv08UAG77piJi09OFIEcetTiq/wy9Zeb6fmEuMFzsT
2aR6x0d43OXqAgcKFgFuzqdXgxqhP/n9/eIqXdVA
-----END RSA PRIVATE KEY-----

做兩件事:

1)創建證書以包裝密鑰並將公鑰公開為證書,以便keytool理解它。

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

2)根據新請求創建自簽名證書。

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

然后, 合並證書和私鑰 ,並導入到keytool

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

這將獲得鑰匙。 利用私鑰和公鑰以及與您選擇的SSH / SFTP庫進行交互是一項練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM