2012-07-23 24 views
8

Bir dış tarafdan aldığım sertifikayı okumak için Java'yı kullanmaya çalışıyorum. Kod aşağıdaki hatayı atıyor:Bir X.509 sertifikasını Java ile okuma

java.lang.RuntimeException: java.security.cert.CertificateException: Unable to initialize, java.io.IOException: extra data given to DerValue constructor

kodu:

FileInputStream ksfis = new FileInputStream(this.getCertificateFile()); 
ksbufin = new BufferedInputStream(ksfis); 
certificate = (X509Certificate) 
    CertificateFactory.getInstance("X.509").generateCertificate(ksbufin); 

sorun kodunda, bir kendinden imzalı sertifikayı oluşturulan ve koduyla kullanılmamıştır emin olmak için, ve iyi çalıştı. Her iki sertifikayı da sistem anahtar zincirine yükledim ve her ikisi de geçerli. Mac ve Java 1.6 kullanıyorum.

Harici Parti sertifikasını yüklediğimde yukarıdaki istisnayı neden aldığım hakkında bir fikriniz var mı? Transfer sırasında bozuk olduğunu mu düşünüyorsun? Eğer olduysa, yerel sistemde geçerli olarak gösterilmemeli, doğru mu?

+0

Metin düzenleyicide açarsanız, metni veya çöpü gösterir mi? –

+0

Ben metin editörü ve onun tam çöp ve üçüncü parti biri BEGIN Sertifika ve END sertifika metni içinde düzgünce düzenlenmiş ve bu iki uç içindeki içeriği == (base64 kodlu?) – Java

+0

düzgünce düzenlenmiş olarak - ---- BAŞLANGIÇ BELGESİ ----- \ n tabanı 64 önemsiz \ n ----- END SERTİFİKASI ----- 'Varsayım mı? –

cevap

6

deneyin bu kullanarak openssl yazın ve sonra sonuç almak için:

openssl x509 -outform der -in certificate.pem -out certificate.der 

veya hafif API Java Bouncy kale işlevini kullanın: Sen sonucunu kodlayabilir

http://www.bouncycastle.org/docs/pkixdocs1.5on/org/bouncycastle/openssl/PEMReader.html

yeniden ve daha sonra JCE tanımlı bir sertifika almak için Java'daki varsayılan CertificateBuilder'ı kullanın.

+0

FWIW, BouncyCastle hafif API, bana çok benzer bir hata verdi. – cmbaron

+0

Tüm sertifikalar eşit değil, @cmbaron, birçok kodlama hatası gördüm. Kodunuzun çalışması gerektiğinden eminseniz (Bouncy mail listesine bakınız) o zaman sizin sertifikanız da olabilir. –

İlgili konular