Lỗi chứng chỉ SSL: xác minh lỗi: num = 20: không thể nhận chứng chỉ nhà phát hành địa phương


11

Tôi đã cố gắng để kết nối SSL đến máy chủ LDAPS (Active Directory) để hoạt động, nhưng vẫn gặp sự cố. Tôi đã thử sử dụng điều này:

openssl s_client -connect the.server.edu:3269 

Với kết quả như sau:

verify error:num=20:unable to get local issuer certificate 

Tôi nghĩ, OK, máy chủ cũng là một máy chủ sản xuất cũ vài năm tuổi. Có lẽ CA không có mặt. Sau đó tôi rút chứng chỉ từ đầu ra thành tệp pem và thử:

openssl s_client -CAfile mycert.pem -connect the.server.edu:3269

Và điều đó cũng không hiệu quả.

Tôi đang thiếu gì? Không phải là LUÔN LUÔN làm việc sao?

ssl  openssl 

Để rõ ràng, có vẻ như LDAPS, khi được cung cấp từ Windows, không xuất trình chứng chỉ CA khi kết nối được thực hiện. Do đó, bạn nên lấy chứng chỉ CA X.509, xuất dưới dạng base64 và gán như mô tả trong các câu trả lời dưới đây. Trong trường hợp của tôi, bằng cách sử dụng python-ldap, bạn chỉ định nó ở phạm vi GLOBAL (không phải ví dụ ldap.initialize () của bạn) như sau: ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem') Tôi đã có thể sử dụng STARTTLS (trong cổng LDAP 389) như mong đợi.
mbrownnyc

Câu trả lời:


4

Vì vậy, đây là những gì tôi thấy như tên chứng chỉ 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

Đó là tên của chứng chỉ mà tôi đã nhập sau khi tôi thực hiện các phần mềm trong lần thử thứ hai ở trên. Tôi đã liệt kê các certs trong kho khóa bằng cách làm điều này:

$JAVA_HOME/bin/keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts

Tôi thấy chứng chỉ 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

Để chắc chắn rằng openssl đang sử dụng kho khóa mà tôi đang sử dụng với máy chủ, tôi đang sử dụng đối số -CAfile:

openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts

Biết rằng kho khóa java cho CA có mật khẩu, tôi đã thử sử dụng tùy chọn -pass pass: password như thế này:

openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts -pass pass:changeit

nhưng điều đó cũng không hiệu quả.

Điều thú vị ở đây là tệp cacerts có mật khẩu trên đó và openssl không phàn nàn rằng nó không thể đọc được tệp cacerts. Điều đó có vẻ tanh với tôi. Có hay bất cứ điều gì khác rung chuông?


3

Lỗi đó là cách nói của openssl, "Tôi không thể theo chuỗi chứng chỉ đến một gốc đáng tin cậy". Tôi vừa thực hiện lệnh tương tự với các máy chủ AD của riêng tôi và tôi nhận được một chuỗi chứng chỉ đầy đủ, nhưng chứng chỉ hàng đầu có lỗi chính xác đó. Nếu bạn có khóa pub của CA đã ký chứng chỉ, bạn có thể chỉ định nó bằng -CAfilehoặc -CApathtùy chọn


Ok, cảm ơn đã phản hồi. Vì vậy, tôi đã thử nó. Có chứng chỉ CA bằng cách thực hiện tương tự với tùy chọn -showcerts trên, lấy chứng chỉ khác. Đó phải là chứng chỉ CA, phải không? Đã thử rằng thay vì chứng chỉ máy chủ trong tệp pem và nhận được thông báo lỗi tương tự. Còn suy nghĩ nào khác không?

Trong trường hợp đó, có khả năng là nó không được xác nhận vì một lý do khác, chẳng hạn như đã hết hạn.
sysadmin1138

1

Tôi đã cố gắng để kết nối SSL đến máy chủ LDAPS (Active Directory) để hoạt động, nhưng vẫn gặp sự cố. Tôi đã thử sử dụng điều này:

Nếu bạn đang sử dụng OpenLDAP, bạn có thể đặt:

TLS_REQCERT=never

trong openldap.conftệp của bạn , hướng dẫn OpenLDAP không thử xác minh chứng chỉ. Có một tùy chọn tương tự nếu bạn đang thực hiện xác thực LDAP với Apache.

Nếu bạn thực sự muốn thực hiện xác minh chứng chỉ, những điều sau đây có thể giúp:

Tôi đang thiếu gì? Không phải là LUÔN LUÔN làm việc sao?

Tôi không nghĩ vậy. Mặc dù những điều sau đây nghe có vẻ dứt khoát, nhưng đây thực sự chỉ là vị khách tốt nhất của tôi:

Những gì bạn đã thử sẽ chỉ làm việc cho một chứng chỉ tự ký. Bởi vì chứng chỉ thực sự được phát hành bởi Windows CA, cố gắng sử dụng chứng chỉ máy chủ làm đối số để -CAfilekhông nhận được bất cứ điều gì cho bạn.

Có chứng chỉ CA bằng cách thực hiện tương tự với tùy chọn -showcerts trên, lấy chứng chỉ khác. Đó phải là chứng chỉ CA, phải không?

Không nhất thiết, không. Không có gì đảm bảo rằng máy chủ từ xa xuất trình chứng chỉ CA trong đầu ra của nó. Trước tiên bạn cần xem xét công ty phát hành chứng chỉ máy chủ:

openssl x509 -in server.crt -noout -text | grep Issuer

... Và sau đó xem liệu một trong những chứng chỉ khác mà bạn có phù hợp với nhà phát hành đó không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.