วิธีทดสอบ Java Client Call https SSL ด้วย SSLPoke
Error : sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targe
ปัญหานี้เกิดจากการ Call ไปที่ URL ที่เป็น https SSL
ก่อนอื่นแนะนำให้ทำการทดสบก่อนว่า เครื่องเราสามารถ Call ทะลุ Security ไปที่ URL หรือ Domain นั้นได้หรือเปล่า
วิธีการก็อาจจะใช้ การเขียน Java Client เพื่อทดสอบ
แต่ถ้าหากเอาแบบง่ายๆ เลยลองวิธีนี้ download SSLPoke จาก Link นี้
https://confluence.atlassian.com/kb/files/779355358/779355357/1/1441897666313/SSLPoke.class
แล้วลอง run คำสั่งทดสอบด้วยคำสั่งนี้
$JAVA_HOME/bin java SSLPoke youdomain.com port
ตัวอย่างเช่น
$JAVA_HOME/bin java SSLPoke localhost 8080
ถ้าไม่ผ่านท่านจะเจอ error ประมาณนี้
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.pro
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManager
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509Tr
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509Tr
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHands
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshak
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:89
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocke
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:6
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:73)
at SSLPoke.main(SSLPoke.java:31)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBu
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318)
แนวทางแก้ให้ทำการ import cert ของ URL นั้นให้มัน trust กับ java ที่เครื่องเราก่อนครับ
ถ้าหากแก้ไขจนผ่านแล้วท่านจะได้ message แบบนี้กลับมา
Successfully connected
ขอให้โชคดีครับ ^^