SORU
3 Kasım 2009, Salı


Java istemci sertifikası kimlik doğrulaması, HTTPS

HTTPS/SSL/TLS için oldukça yeniyim ve biraz istemcilerin sertifikaları ile kimlik doğrulaması yaparken şimdiki gerekiyor ne bitti kafam karıştı.

Belirli bir URL için veri basit bir POST yapması gereken bir Java istemci yazıyorum. O kısmı gayet iyi çalışıyor, tek sorun HTTPS üzerinden yapılması gerekiyordu. HTTPS kısmını işlemek için oldukça kolaydır (ya da HTTPclient ile ya da Java kullanarak inşa HTTPS desteği var), ancak istemci sertifikası kimlik doğrulaması ile yolda kaldım. Zaten benim kod ile henüz denemedim ki burada çok benzer bir soru, (çok yakında, onun ne olduğunu gördüm. Benim şimdiki sorun ne yaparsam yapayım - - Java istemci asla sertifikası boyunca (PCAP dökümleri ile bu kontrol edebilirsiniz) gönderir.

Sertifikalar (özellikle Java için - eğer sorun buysa tabii) kimlik doğrulaması yaparken istemci sunucuya mevcut ne olduğunu bilmek istiyorum? Bu PİÇ bir dosya ya da#12 AMAÇ nedir? Onlara; sadece istemci sertifikası, ya da bir anahtar olması gerekiyordu? Eğer öyleyse, hangi anahtarı? Dosyaları, sertifika türleri ve bu tür tüm farklı çeşitleri hakkında epey bir karışıklığa var.

Olarak söyledim önce ben yeni HTTPS/SSL/TLS çok seviniriz bazı bilgiler de (olmak zorunda değil bir deneme; ederim yerleşmek için bağlantılar için iyi bir yazı). Şimdiden teşekkür ederim.

CEVAP
10 Kasım 2009, Salı


Son olarak tüm sorunları çözmek için başardı, böylece kendi soruma cevap vereyim. Bu özellikle benim sorunum(ler) almak için yönetmek için çözüldü kullandım dosya ayarları;

müşterinin deposubirPKCS#12 formatındaiçeren dosya

  1. Müşterininkamusertifika (bu örneği kendinden imzalı bir CA tarafından imzalanmış)
  2. Müşterininözelanahtar

Bunu oluşturmak için kullanılan OpenSSL pkcs12 Bu komut, örneğin;

openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -name "Whatever"

İpucu:en son OpenSSL aldığınızdan emin olundeğildüzgün oluşturmak için izin vermez bir hata muzdarip gibi görünüyor, çünkü 0.9.8 h sürüm#12 dosyaları AMAÇ.

Bu#12 dosyası Java istemci tarafından açıkça sunucu kimlik doğrulaması için istemci istediğinde sunucu için istemci sertifikası sunmak için kullanılacak AMAÇ. İstemci sertifikası kimlik doğrulaması için protokol aslında nasıl çalıştığını genel bir bakış için Wikipedia article on TLS (istemci özel anahtarı bunun nedenini açıklar).

müşterinin truststorebir yalındırPİÇ biçimiiçeren dosyakökyaAra CA sertifikaları. Bu CA sertifikası olacaktır belirleyen uç sen izin verilecek iletişim ile, bu durumda bunu sağlayacak istemci bağlanmak için hangi server hediye sertifikası tarafından imzalanmış bir truststore CA.

Bunu oluşturmak için standart Java keytool, örneğin; kullanabilirsiniz

keytool -genkey -dname "cn=CLIENT" -alias truststorekey -keyalg RSA -keystore ./client-truststore.jks -keypass whatever -storepass whatever
keytool -import -keystore ./client-truststore.jks -file myca.crt -alias myca

Bu truststore kullanarak, bir istemci sertifikası CA myca.crt tarafından tespit imzalanan mevcut olan bütün sunucuları ile tam bir SSL el sıkışması yapmak için çalışacağız.

Yukarıdaki dosyalar kesinlikle müşteri içindir. Set-up bir sunucu için, sunucu, anahtar ve truststore kendi dosyalarını gerekiyor. Harika bir Java istemcisi ve sunucusu (Tomcat kullanarak) hem de tam çalışan bir örnek ayarlama this website üzerinde bulunabilir için-doğru yürüyün.

Sorunlar/Sözler/İpuçları

  1. İstemci sertifikası kimlik doğrulamasısadece sunucu tarafından zorlanabilir.
  2. (Önemli!Sunucu, bir istemci sertifikası (TLS el sıkışması bir parçası olarak) istediğinde), ayrıca sertifika isteği bir parçası olarak güvenilir CA listesine sağlayacaktır. İstemci kimlik doğrulaması için takdim edeceğiniz sertifikadeğilbu CA tarafından imzalanmış, tüm sunulan (benim görüşüme göre, bu garip davranış, ama bir nedeni olduğuna eminim) olmayacak. Bunun ana nedeni, benim konularda, diğer taraf yoktu yapılandırılmış sunucu düzgün bir şekilde kabul etmek benim kendinden imzalı bir istemci sertifikası ve farz ettiğimiz sorun oldu benim için düzgün sağlayan istemci sertifikası isteği.
  3. Av. /Paket analiz HTTPS ve çok yardımcı ve sorun hata ayıklama bulmak olacak harika SSL vardır. -Djavax.net.debug=ssl benzer ama daha iyi yapılandırılmış ve (Belki) eğer Java rahatsız olduysan yorumlamak daha kolay SSL hata ayıklama çıktı.
  4. Mükemmel mümkün Apache httpclient Kütüphanesi kullanın. Kullanmak isterseniz httpclient, sadece yerini hedef URL ile HTTPS eşdeğer ekleyin ve aşağıdaki JVM argümanları (aynı için başka bir istemci bağımsız olarak kütüphane için kullanmak istediğiniz gönderme/alma Veri üzerinden HTTP/HTTPS):

    -Djavax.net.debug=ssl
    -Djavax.net.ssl.keyStoreType=pkcs12
    -Djavax.net.ssl.keyStore=client.p12
    -Djavax.net.ssl.keyStorePassword=whatever
    -Djavax.net.ssl.trustStoreType=jks
    -Djavax.net.ssl.trustStore=client-truststore.jks
    -Djavax.net.ssl.trustStorePassword=whatever

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • PremiumBeat.com - Royalty Free Music

    PremiumBeat.

    16 Kasım 2008
  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012
  • The Verge

    The Verge

    8 AĞUSTOS 2006