2011-11-18 16 views
6

CAcert numaralı telefondan SSL sunucusu sertifikasını oluşturdum. Ben bir Java programından bu sunucudan bir sayfa getirmek çalıştığınızda (aşağıda), benNeden java cacert.org'da certraldı: "keyCertSign biti ayarlanmadı"?

Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: CA key usage check failed: keyCertSign bit is not set 

Herkes bu neden olabileceğini biliyor olsun?

  • Hem sınıf 1 hem de sınıf 3 kök sertifikalarıyla aynı sonucu imzalayan sertifikalar oluşturmayı denedim.
  • Ben CAcert.org certs kullanan iki diğer sitelerden sayfaları getirmek çalıştığınızda hata oluşmaz gelmez: Kök & sınıf cacert.org 3 certs düzgün yüklü inanmak https://www.cacert.org ve https://pause.perl.org (me lider sistemim).
  • cacert.org sertifikalarını keytool -keystore /etc/ssl/certs/java/cacerts -list numaralı belgede görebilirsiniz.
  • Evet, birkaç web tarayıcısının cacert.org root ve class 3 certs ile gönderildiklerini biliyorum.
  • Sertifika, *.an.example.com (gerçek etki alanı redakte edilmiş) için bir joker karakterdir.

    class Test { 
        public static void main(String args[]) throws Exception { 
         java.net.URL url = new java.net.URL(args[0]); 
         java.io.InputStream s = url.openStream(); 
        } 
    } 
    

    full stack trace herhangi yararlı bilgiler eklemek görünmüyor:

İşte testine kullanıyorum Java kod.

keytool(1) manpage

Extensions can be marked critical to indicate that the extension should 
be checked and enforced/used. For example, if a certificate has the 
KeyUsage extension marked critical and set to "keyCertSign" then if this 
certificate is presented during SSL communication, it should be rejected, 
as the certificate extension indicates that the associated private key 
should only be used for signing certificates and not for SSL use. 

bahsetmektedir ki ama sertifikayı kontrol ettim ve "Sertifika Anahtarı Kullanımı" uzantı "İmzalama" demek yapar iken, aynı zamanda "Kritik değil" işaretlenir.

Üzgünüz, etki alanı veya sertifika alanımı açmak istemiyorum, ancak gerekirse bir sunucuyu test edebilirim.

+1

Bu yolu buldu: http://www.ericsimmerman.com/resolving-a-ca-key-usage-check-failed-keycert – Thilo

+0

@Thilo - iyi bulmak. İki kez kontrol ettim ve SSLCertificateChainFile dosyasının düzgün şekilde kurulup yapılandırıldığını görüyorum. –

+0

@Thilo - Onu geri alıyorum, haklısın! [Zincir dosyası berbat] (http://wiki.cacert.org/SimpleApacheCert?action=AttachFile&do=view&target=CAcert_chain.pem) (CAcert.org millet: BU DÜZELTME!). Kendimi "cat class3.crt root.crt> chain.pem" ile bir zincir dosyası yaptım ve şifreli "keyCertSign biti ayarlanmadı" hatası kayboldu. Bunu bir cevap olarak eklemekten çekinmeyin ve kabul edeceğim. –

cevap

0

Sertifika SSL iletişimi için kullanılmayacak gibi görünüyor.
I.e. CA sertifikası olarak işaretlenir, ancak sertifika imzalama için uzantı ayarlanmadığı için Java bunu reddeder.
Tarayıcılar daha hafif olsa da, Java bu gibi şeylerde bazen daha katıdır.

İlgili konular