Я пытаюсь создать зашифрованный закрытый ключ и CSR с использованием Java в Matlab. Matlab добавляет некоторую второстепенную сложность, но это в основном проблема Java. Я начинаю с закрытым ключом:Вывод зашифрованного закрытого ключа PK8 из Java BouncyCastle
java.security.Security.addProvider(org.bouncycastle.jce.provider.BouncyCastleProvider());
keyGen = java.security.KeyPairGenerator.getInstance('RSA', 'BC');
keyGen.initialize(2048, java.security.SecureRandom());
keypair = keyGen.generateKeyPair();
privateKey = keypair.getPrivate();
Если зашифровать ключ и выводит его в PEM:
m=org.bouncycastle.openssl.PKCS8Generator.PBE_SHA1_3DES;
encryptorBuilder = org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8EncryptorBuilder(m);
encryptorBuilder.setRandom(java.security.SecureRandom());
encryptorBuilder.setPasssword(password);
oe = encryptorBuilder.build();
gen = org.bouncycastle.openssl.jcajce.JcaPKCS8Generator(privateKey,oe);
privKeyObj = gen.generate();
fos = java.io.FileWriter('private.pem');
pem = org.bouncycastle.openssl.jcajce.JcaPEMWriter(fos);
pem.writeObject(privKeyObj);
pem.flush();
fos.close();
я получаю совершенно хороший ключ. Проблема в том, что я хочу использовать ключ с jdbc, поэтому мне нужен файл pK8 с форматированием DER. Я не могу понять, как это сделать из BouncyCastle. Клудж обходной путь, который преуспевает:
textWriter = java.io.StringWriter();
pem = org.bouncycastle.openssl.jcajce.JcaPEMWriter(textWriter);
pem.writeObject(privateKey);
pem.flush();
thekey = char(textWriter.toString());
cmd = ['echo "' thekey '"|openssl pkcs8 -topk8 -out private.pk8 -inform PEM -outform DER -passout pass:' password];
system(cmd);
Теперь, очевидно, это выставляет как незашифрованный закрытый ключ и пароль. Я пробовал всякие вещи, чтобы принуждать privKeyObj к DER, но они обычно покидают меня:
$openssl pkcs8 -inform DER -outform PEM -in private.pk8 -out private.pem
Error decrypting key
140735211835472:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1201:
140735211835472:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:765:
140735211835472:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:697:Field=version, Type=PKCS8_PRIV_KEY_INFO
Цель этого кода для генерации CSR на компьютере конечного пользователя, который я затем подписать, и который зашифровывается MAC-адресом машины (и солью), так что программа будет работать только на авторизованном компьютере, и только авторизированные машины смогут получить доступ к моей базе данных PostgreSql.
Предложения?
Обратите внимание, что я полностью пропустил это сообщение, так как ему не хватало Java и криптографические тэги. Всегда используйте теги с высоким уровнем посещаемости и укажите свой язык. Это более важно, чем использование более конкретных: они в основном служат для того, чтобы ваш вопрос был замечен другими. –