2016-09-28 7 views
3

У меня возникают трудности с обменом секретными ключами между клиентом с использованием Java Bouncycastle и сервера ключей с использованием библиотек RSA Python. Формат PEM используется для передачи ключей через REST. сервер ключей не может расшифровать ключ (необходимый при изменении шифрования пароля) Я поставки, он ожидает PKCS # 1 или PKCS # 8 ключ с ФЭУ следующим образом:Зашифрованный закрытый ключ Poun output: RSA PRIVATE KEY vs PRIVATE KEY

-----BEGIN PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,ACCB65DDEB20F5AB 

EcU3fekuLeUc0viPJ20vAG+Jg1Igkvm+JTjnLmMBE6SwDS/hkf3KP0bFto7Pv6fJ 

Но выход BouncyCastle в , используя JcePEMEncryptorBuilder и JcaMiscPEMGenerator имеет немного отличается BEGIN строку:

-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,ACCB65DDEB20F5AB 

EcU3fekuLeUc0viPJ20vAG+Jg1Igkvm+JTjnLmMBE6SwDS/hkf3KP0bFto7Pv6fJ 

Как я сделал некоторые исследования, я узнал, что PEM начиная НАЧАТЬ RSA PRIVATE KEY указывает ключ кодируется с помощью PKCS # 1.

Когда я пытаюсь получить PKCS # 8 шифрованный вывод с помощью JceOpenSSLPKCS8EncryptorBuilder и JcaPKCS8Generator я получаю PEM следующим образом:

-----BEGIN ENCRYPTED PRIVATE KEY----- 
MIICrjAoBgoqhkiG9w0BDAEDMBoEFP+MLFFaKGC6J/37jF7wRgL3coZdAgIIAASC 
AoAdWVo4kAQ1S0stQZbzca7wL876nzlKfcOa4BKsCttPnFVPugJOvGDnATgUK5P/ 

Так что мой вопрос: есть ли способ, чтобы получить BouncyCastle для вывода PEM с зашифрованный закрытый ключ в форме BEGIN PRIVATE KEY или библиотека python, ожидающая неправильного формата?

Рядом с этим я не могу понять, использует ли bouncycstle PKCS # 1 или PKCS # 8 в JcePEMEncryptorBuilder. Он использует PrivateKeyInfo # getEncoded, но документация нечеткая о формате PKCS.

BouncyCastle версия: bcpkix-jdk15on 1,52

+0

Я бы сказал, что Python lib не ожидает правильного заголовка для ключа RSA формата PKCS # 1. Если вы разделите «RSA» с BC, будет ли сервер принят? –

+0

Я действительно пробовал это без везения;) –

ответ

0

Оказалось, что Lib Python не регулировало все стандартные форматы правильно, поэтому мы исправили ее, используя другую библиотеку Python, который поддерживает формат BouncyCastle отправляет.