Одной из задач приложения Java, которую я создаю, является подключение к удаленному SFTP-серверу. Для этого у меня есть сертификат удаленной машины и локальный идентификатор (id_rsa
и id_rsa.pub
в папке .ssh
). Это работает нормально.Как добавить ключевую пару файла идентификатора SSH в хранилище JKS
Я хотел бы поместить сертификат и личность в хранилище ключей 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 хранилище?
Я нашел этот связанный вопрос, но я не хочу хранить его как строку пароля, которая кажется забавной. https://stackoverflow.com/questions/6243446/how-to-store-a-simple-key-string-inside-java-keystore#6243755 – Rolf
Я не совсем уверен здесь, но я думаю, что хранилища java (либо в PKCS12 или JKS) предназначены для использования в SSL-соединениях. Связь SSL использовала нечто более совершенное, чем открытый ключ, называемый сертификатом, для аутентификации объектов.Сертификат вставляет Distinguish Name и другие вещи для инициализации SSL-связи между двумя объектами. Я думаю, что существует путаница между SSL и SSH, и я уверен, что возможно, что информация, хранящаяся в хранилище ключей, может использоваться для связи SSH. –
Вы пытаетесь использовать существующий закрытый ключ, или это нормально для создания нового? –