Www.udemy.com (REST Java Web Services) adresindeki REST web hizmetleri için bir eğitim üzerinde çalışıyorum. Öğreticideki örnek, SSL'ye sahip olmak için, eclipse "client" projemde "key store" dosyası içermesi gereken "trust_store" adlı bir klasöre sahip olmamız gerektiğini söyledi (hizmeti çağırmak için bir "client" projemiz vardı) ve REST web hizmetini içeren "hizmet" projesi - aynı tutulma çalışma alanındaki 2 proje, biri istemci, diğeri hizmet). İşleri basitleştirmek için, kullandığımız glassfish uygulama sunucusundan (glassfish \ domains \ domain1 \ config \ keystore.jks) "keystore.jks" dosyasını kopyalamayı ve içinde bulunduğum bu "trust_store" klasörüne koymalarını söylediler müşteri projesi. Bu mantıklı görünüyor: sunucudaki kendinden imzalı sertifikalar ' s key_store, trust_store istemcisindeki sertifikalara karşılık gelir. Şimdi, bunu yaparken, orijinal gönderinin bahsettiği hatayı alıyordum. Bu googled ve hata güvenilir / imzalı bir sertifika içermeyen istemcideki "keystore.jks" dosya nedeniyle olduğunu, bulduğu sertifikanın kendinden imzalı olduğunu okudum.
İşleri açık tutmak için, anladığım kadarıyla "keystore.jks" kendinden imzalı sertifikalar içerdiğini ve "cacerts.jks" dosyasının CA sertifikaları (CA tarafından imzalanmış) içerdiğini söyleyeyim. "Keystore.jks", "keystore" ve "cacerts.jks", "trust store" dır. Bir yorumcu, "Bruno" nun yukarıda söylediği gibi, "keystore.jks" yereldir ve "cacerts.jks" uzaktaki istemciler içindir.
Ben de dedim ki, hey, glassfish'in de glassfish'in trust_store dosyası olan "cacerts.jks" dosyası var. cacerts.jsk, CA sertifikaları içermelidir. Ve görünüşe göre en az bir CA sertifikası olan bir anahtar deposu dosyası içermek için trust_store klasörüne ihtiyacım var. Bu nedenle, "cacerts.jks" dosyasını yaptığım "trust_store" klasörüne, istemci projeme koymayı ve VM özelliklerini "keystore.jks" yerine "cacerts.jks" 'i gösterecek şekilde değiştirmeyi denedim. Bu hatadan kurtuldu. Sanırım gereken tek şey çalışmak için bir CA sertifikasıydı.
Bu, üretim için, hatta sadece bir şeylerin işe yaramasının ötesinde gelişim için ideal olmayabilir. Örneğin, istemcideki "keystore.jks" dosyasına CA sertifikaları eklemek için muhtemelen "keytool" komutunu kullanabilirsiniz. Ama yine de umarım bu en azından burada hataya neden olabilecek olası senaryoları daraltır.
AYRICA: yaklaşımım istemci için yararlı görünüyordu (istemci trust_store'a eklenen sunucu sertifikası), orijinal gönderiyi çözmek için yukarıdaki yorumların sunucu için yararlı olduğu görülmektedir (sunucu trust_store'a eklenen istemci sertifikası). Şerefe.
Eclipse proje kurulumu:
- MyClientProject
- src
- Ölçek
- JRE Sistem Kütüphanesi
- ...
- trust_store
--- cacerts.jks --- keystore.jks
MyClientProject.java dosyasından snippet:
static {
// Setup the trustStore location and password
System.setProperty("javax.net.ssl.trustStore","trust_store/cacerts.jks");
// comment out below line
System.setProperty("javax.net.ssl.trustStore","trust_store/keystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
//System.setProperty("javax.net.debug", "all");
// for localhost testing only
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
return hostname.equals("localhost");
}
});
}