Ваши файлы .key
и .crt
могут быть в формате PEM.Чтобы проверить это, откройте их в текстовом редакторе и проверьте, выглядит ли содержимое как ------BEGIN CERTIFICATE------
(или «начать секретный ключ RSA» ...).Как правило, это формат по умолчанию, используемый OpenSSL, если вы не указали явно DER.
Возможно, он не требуется (см. Ниже), но если ваш сертификат в формате DER (двоичный формат), вы можете преобразоватьих в формате PEM, используя:
openssl x509 -inform DER -in cert.crt -outform PEM -out cert.pem
(Проверьте справку для openssl rsa
, чтобы сделать что-то похожее с закрытым ключом, если необходимо.)
Затем вы получите два варианта:
Затем его можно использовать непосредственно из Java в качестве хранилища ключей типа "PKCS12".Большинство приложений Java должны позволять вам указывать тип хранилища ключей в дополнение к расположению файла.Для системных свойств по умолчанию это делается с javax.net.ssl.keyStoreType
(но приложение, которое вы используете, может не использовать это).В противном случае, если вы хотите загрузить его явно, используйте что-то вроде этого:
KeyStore ks = KeyStore.getInstance("PKCS12");
FileInputStream fis =
new FileInputStream("/path/to/myhost.p12");
ks.load(fis, "password".toCharArray()); // There are other ways to read the password.
fis.close();
(Тогда вы сможете перебирать aliases()
из KeyStore
ииспользуйте getCertificate
(а затем getPublicKey()
для открытого ключа) и getKey()
.
Используйте BouncyCastle * PEMReader
.
FileReader fr = ... // Create a FileReader for myhost.crt
PEMReader pemReader = new PEMReader(fr);
X509Certificate cert = (X509Certificate)pemReader.readObject();
PublicKey pk = cert.getPublicKey();
// Close reader...
Для закрытого ключа вам необходимо реализовать PasswordFinder
(см. Ссылку в документе PEMReader) для создания PEMReader
, если закрытый ключзащищен паролем. (Вам нужно будет преобразовать результат readObject()
в Key
или PrivateKey
.)