Tag: SSLHandshakeException

Java Uygulama için Api’ın Geçerli Sertifika Dosyasını Set Etmek

Https protokolü ile SaaS hizmet sağlayan https://api1.paritus.com servisi mevcut. Bu servisin cevabını, yazmış olduğumuz bir java uygulaması içinde kullanmayı planlıyoruz. Jackson – JaxRS, Jersey-Client veya başka bir rest client kütüphanesi kullanarak normal bir http isteğini handle edebiliriz. Ama iş https üzerinden veri çekmeye gelince java tarafında daha önce karşılaşmadığım javax.net.ssl.SSLHandshakeException hatası ile karşılaştım.

Biraz araştırınca .Net tarafında da benzer problemler olduğunu, .Net tarafında aşağıdaki gibi bir yöntem ile kod içinde çözülebildiğini gördüm.

//System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object s, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; };

Java tarafında daha farklı çözümler varmış. Biri application server’ın conf/server.xml konfigurasyon dosyası üzerinde cert dosyasını tanımlamak. Diğeri ise uygulamanın çalışacağı java’nın keystore dosyasına api1.paritus.com’un .cer dosyasını import etmek. Ben ikincisini uyguladığımdan onu açıklayacağım.

Öncelikle api1.paritus.com’un kullandığı sertifikayı tarayıcı üzerinden görüntüleyip exportunu alıyoruz. Aşağıdaki .cer dosyası tarayı üzerinden inmiş sertifika bilgi dosyasıdır.

./jre_linux/bin/keytool -import -noprompt -trustcacerts -alias api1.paritus.com -file ../api1_paritus_com.cer -keystore ./jre_linux/lib/security/cacerts -storepass changeit

Yukarda “keytool” u kullanarak güvenilir ca sertifikalarına yenisini ekliyoruz. Alias ile bir isim veriyoruz. file ile tarayıcıdan indirdiğimiz sertifika bilgi dosyasını belirtiyoruz. keystore ile ca sertifikalarının olduğu caCerts dosyasını belirtiyoruz.

Bundan sonra kodu geliştirdiğimiz ortamı veya kodun çalıştığı application server’i restart ediyoruz ve handshake hatasını almayıp kodumuzun başarılı çalıştığını görüyoruz.

Not: linux ve windows makine üzerinde aynı komutu çalıştırdım. Problem yaşamadım. Sormak istediğiniz birşey olursa sefersezer@gmail.com adresime mail atabilirsiniz.

Saygılarımla