คำตอบโดยละเอียดสำหรับพวกเราที่เต็มใจทำการเปลี่ยนแปลงการกำหนดค่าในเครื่องซึ่งรวมถึงการสำรองไฟล์ config:
1. ทดสอบว่าใช้งานได้หรือไม่ก่อนการเปลี่ยนแปลง
หากคุณยังไม่มีโปรแกรมทดสอบคุณสามารถใช้โปรแกรม java SSLPing ping ของฉันซึ่งทดสอบการจับมือ TLS (จะทำงานกับพอร์ต SSL / TLS ใด ๆ ไม่ใช่แค่ HTTPS) ฉันจะใช้ SSLPing.jar ที่สร้างไว้ล่วงหน้า แต่การอ่านโค้ดและสร้างด้วยตัวเองนั้นเป็นงานที่ง่ายและรวดเร็ว:
$ git clone https://github.com/dimalinux/SSLPing.git
Cloning into 'SSLPing'...
[... output snipped ...]
เนื่องจากเวอร์ชัน Java ของฉันเก่ากว่า 1.8.0_101 (ไม่ได้เผยแพร่ในขณะที่เขียน) ใบรับรอง Let's Encrypt จะไม่ตรวจสอบตามค่าเริ่มต้น มาดูกันว่าความล้มเหลวมีลักษณะอย่างไรก่อนใช้การแก้ไข:
$ java -jar SSLPing/dist/SSLPing.jar helloworld.letsencrypt.org 443
About to connect to 'helloworld.letsencrypt.org' on port 443
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[... output snipped ...]
2. นำเข้าใบรับรอง
ฉันใช้ Mac OS X พร้อมชุดตัวแปรสภาพแวดล้อม JAVA_HOME คำสั่งในภายหลังจะถือว่าตัวแปรนี้ถูกตั้งค่าสำหรับการติดตั้ง java ที่คุณกำลังแก้ไข:
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/
ทำการสำรองไฟล์ cacerts ที่เราจะแก้ไขเพื่อให้คุณสามารถสำรองการเปลี่ยนแปลงใด ๆ โดยไม่ต้องติดตั้ง JDK ใหม่:
$ sudo cp -a $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/cacerts.orig
ดาวน์โหลดใบรับรองการลงนามที่เราต้องนำเข้า:
$ wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.der
ดำเนินการนำเข้า:
$ sudo keytool -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -importcert -alias lets-encrypt-x3-cross-signed -file lets-encrypt-x3-cross-signed.der
Certificate was added to keystore
3. ตรวจสอบว่าใช้งานได้หลังจากการเปลี่ยนแปลง
ตรวจสอบว่า Java มีความสุขในการเชื่อมต่อกับพอร์ต SSL:
$ java -jar SSLPing/dist/SSLPing.jar helloworld.letsencrypt.org 443
About to connect to 'helloworld.letsencrypt.org' on port 443
Successfully connected