2014-07-01 28 views
5

Parola korumalı bir pem dosyasında özel anahtar kaydetmeye çalışıyorum. Sorun şu ki, pem dosyası oluşturuldu ve ben , openssl ile açabilir, ancak şifre sorulmaz! Yürüttüğü sonra ben pk.pem dosyasınıJAVA: Parola korumalı bir pem dosyasındaki özel anahtar nasıl kaydedilir?

openssl rsa -in pk.pem -check 

açmaya ve onu verir

 KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA"); 
     keygen.initialize(2048); 
     KeyPair keypair = keygen.generateKeyPair(); 

     PrivateKey privKey = keypair.getPrivate(); 

     PKCS8Generator encryptorBuilder = new PKCS8Generator(privKey); 
     encryptorBuilder.setPassword("testing".toCharArray()); 
     PEMWriter writer = new PEMWriter(new FileWriter(new File("pk.pem"))); 
     PemObject obj = encryptorBuilder.generate(); 

     writer.writeObject(obj); 
     writer.flush(); 
     writer.close(); 

:

RSA key ok 
writing RSA key 
-----BEGIN RSA PRIVATE KEY----- 
(... some key appears here ...) 
-----END RSA PRIVATE KEY----- 

O varsayalım İşte

kodudur Özel anahtara erişim vermeden önce şifre sormak! Birisi bana yardımcı olabilir misiniz?

cevap

6

BouncyCastle belgelerini dikkatlice okumalısınız.

// Constructor for an unencrypted private key PEM object. 
PKCS8Generator(java.security.PrivateKey key) 

// Constructor for an encrypted private key PEM object. 
PKCS8Generator(java.security.PrivateKey key, java.lang.String algorithm, java.lang.String provider) 

Dolayısıyla bir şifrelenmemiş PKCS8Generator örneğini oluşturur oluşturmak için yapıcı kullanıyor: Size kullanmak yapıcısı için belirtmektedir. Etkisiz olarak belirlediğiniz şifre.

Belgelere göre bir şifreleme örneği oluşturan bunun yerine diğer yapıcılardan birini kullanın. Not: Söz konusu kod, BouncyCastle'ın (1.4x?) Eski bir sürümünü gerektirir, çünkü geçerli sürüm (1.5x), bu yanıtta sunulanlarla uyumlu olmayan farklı yapıcılara sahiptir. yeni sürümleri için


kullanın:

import org.bouncycastle.openssl.jcajce.JcaPEMWriter; 

JcaPEMWriter writer = new JcaPEMWriter(new PrintWriter(System.out)); 
writer.writeObject(sk); 
writer.close(); 

muhtemelen tabii başka Writer ile PrintWriter değiştirilmesi.

+0

Çok teşekkür ederim! Bunu bilmiyordum ... ve ayrıca eski bir BC versiyonunu kullandığımı bilmiyordum. Tekrar teşekkür ederim. – Snox

+0

Cevabın güncellenmesi, yine de yeterince destek sahibiyim :) –

İlgili konular