วันเสาร์ที่ 6 กันยายน พ.ศ. 2557

Fix SunCertPathBuilderException: Unable To Find Valid Certification Path To Requested Target in Alfresco

Share it Please
การที่จะให้ Tomcat คุยกับ Server ต่างๆ ผ่าน SSL Protocol นั้นเราต้องทำการ Install Certificate ให้กับตัว Tomcat เสียก่อน (Java) ไม่เว้นแม้แต่กรณีที่เป็น Untrust Certificate ก็จำเป็นต้อง add Certificate ก่อนเพื่อที่จะให้ Tomcat สามารถเชื่อมต่อไปยัง Server ที่ต้องการผ่าน Protocol SSL ได้อย่างสมบูรณ์

โดยหากไม่ทำการ Add Certificate ก่อนจะทำให้เวลา Tomcat คุยไปยัง Server ผ่าน SSL แล้วจะเกิด Exception ขึ้น (SSLHandshakeException) หรือคุยกันไม่รู้เรื่องนั่นเอง

ยกตัวอย่างเช่นบน Alfresco เมื่อเรา config smtps ไปยัง google mail แล้วเราไม่ได้ใส่ Certificate ก็จะเกิด Error SunCertPathBuilderException ขึ้นซึ่งสามารถแก้ไขได้โดย

  1. Request ไปยัง SMTP Server ของ Google ด้วยคำสั่ง openssl s_client -connect smtp.gmail.com:465
  2. Save Certificate เป็นนามสกุล .cert หรือ .pem เช่น gmail.cert โดยให้ใช้ Content ตั้งแต่ ---BEGIN CERTIFICATE--- จนถึง ---END CERTIFICATE---
  3. สั่ง Import Certificate ลงไปใน keystore ที่ใช้รัน Tomcat ของตัว Alfresco โดยใช้คำสั่ง
    sudo keytool -import -alias smtp.gmail.com -keystore /path/to/keystore -file /path/to/gmail.cert
    เช่น
    sudo /opt/alfresco-4.2.c/java/bin/keytool -import -alias smtp.gmail.com -keystore /opt/alfresco-4.2.c/java/jre/lib/security/cacerts -file /home/admins/gmail.cert
  4. ตรวจสอบว่า Certificate ที่เรา add เข้าไปนั้นอยู่ใน keystore แล้วหรือยังด้วยคำสั่ง
    keytool -list -v -keystore /path/to/keystore เช่น /opt/alfresco-4.2.c/java/bin/keytool -list -v -keystore /opt/alfresco-4.2.c/java/jre/lib/security/cacerts
โดยเมื่อ Import สำเร็จแล้ว สั่ง Restart Tomcat ก็จะไม่ Error SunCertPathBuilderException อีกต่อไป

Blogroll

About