Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.11.2019(UTC) Сообщений: 47
Сказал(а) «Спасибо»: 17 раз Поблагодарили: 1 раз в 1 постах
|
День добрый! Кажется, понял, в чем проблема, но пока не могу понять, как ее решить. Думаю, что проблема в том, как я читаю приватный ключ из pem-файла и как объединяю сохраненный ранее приватный ключ и полученный сертификат: Код: public void buildPfx(X509Certificate certificate, PrivateKey privateKey) throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, NoSuchProviderException {
String alias = "Test Signer";
X509Certificate[] chain = new X509Certificate[] {
certificate
};
KeyStore keystore = KeyStore.getInstance("PKCS12", "BC");
keystore.load(null, null);
KeyStore.PrivateKeyEntry keyEntry = new KeyStore.PrivateKeyEntry(
privateKey,
chain
);
keystore.setEntry(alias,
keyEntry,
new KeyStore.PasswordProtection(this.getPassword().toCharArray())
);
keystore.store(new FileOutputStream(this.getPfxPath()), this.getPassword().toCharArray());
}
В этом случае формируется key entry в Microsoft Software Key Storage Provider, а затем из него экспортируется pfx. В итоге ГОСТ не работает. Поставил JCP, заменил процесс формирования keyStore: Код:KeyStore keystore = KeyStore.getInstance("HDImageStore", "JCP");
В этом случае получаю ошибку на setEntry: java.security.KeyStoreException: key is not GostPrivateKey or GostExchPrivateKeyЧтение приватного ключа реализую так: Код: public PrivateKey getPrivateKey() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchProviderException, KeyManagementException {
PemObject object = this.readPEMObject(this.getKeyPath());
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(object.getContent());
PrivateKey key = KeyFactory.getInstance("ECGOST3410-2012")
.generatePrivate(privateKeySpec);
return key;
}
Пробовал здесь использовать JCP, но, насколько я понял, он не умеет загружать приватные ключи из pem-файлов. Или все-таки умеет? Предполагаю, что если бы мне удалось прочитать приватный ключ из pem-файла методами JCP, то и при объединении не было бы проблем. P.S. Странно, но certutil на pfx выдает "Плохие данные", но при этом сертификат из этого же pfx устанавливается в личные сертификаты
|