ดังนั้นนี่คือสิ่งที่ฉันเห็นในชื่อใบรับรอง CA:
depth=1 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at //www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA - G3
verify error:num=20:unable to get local issuer certificate
verify return:0
นั่นคือชื่อของใบรับรองที่ฉันได้นำเข้าหลังจากที่ฉันทำ -showcerts ในการลองครั้งที่สองด้านบน ฉันแสดงรายการ certs ใน keystore โดยทำสิ่งนี้:
$JAVA_HOME/bin/keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts
ฉันเห็นใบรับรอง CA ตรงนั้น
Alias name: versign2006
Creation date: Jan 21, 2011
Entry type: trustedCertEntry
Owner: CN=VeriSign Class 3 International Server CA - G3, OU=Terms of use at www.verisign.com/rpa (c)10, OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
Serial number: 641be820ce020813f32d4d2d95d67e67
Valid from: Sun Feb 07 19:00:00 EST 2010 until: Fri Feb 07 18:59:59 EST 2020
Certificate fingerprints:
MD5: BA:B0:65:B4:3B:9C:E8:40:30:21:7D:C5:C6:CD:3F:EB
SHA1: B1:8D:9D:19:56:69:BA:0F:78:29:51:75:66:C2:5F:42:2A:27:71:04
เพื่อให้แน่ใจว่า openssl กำลังใช้ที่เก็บคีย์ที่ฉันใช้กับเซิร์ฟเวอร์ฉันกำลังใช้อาร์กิวเมนต์ -CAfile:
openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts
รู้ว่าที่เก็บคีย์ java สำหรับ CA มีรหัสผ่านฉันพยายามใช้ตัวเลือก -pass pass: password ดังนี้:
openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts -pass pass:changeit
แต่นั่นก็ไม่ได้ผลเช่นกัน
สิ่งที่ตลกเกี่ยวกับการที่ไฟล์ cacerts มีรหัสผ่านและ openssl ไม่ได้บ่นว่ามันไม่สามารถอ่านไฟล์ cacerts ดูเหมือนว่าคาวสำหรับฉัน นั่นหรือสิ่งอื่นใดที่ส่งเสียงระฆัง
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem')
หลังจากนี้ฉันสามารถใช้ STARTTLS (ภายในพอร์ต LDAP 389) ตามที่คาดไว้