SSL Sertifikası hatası: doğrulama hatası: num = 20: yerel yayıncı sertifikası alınamıyor


11

Çalışmak için bir LDAPS sunucusuna (Active Directory) SSL bağlantısı almaya çalışıyorum, ancak sorun yaşamaya devam ediyorum. Bunu kullanarak denedim:

openssl s_client -connect the.server.edu:3269 

Aşağıdaki sonuçla:

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

Düşündüm, tamam, iyi bir sunucu birkaç yaşında eski bir üretim sunucusu. Belki CA mevcut değildir. Daha sonra çıktıyı bir pem dosyasına çekti ve denedim:

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

Ve bu da işe yaramadı.

Neyi kaçırıyorum? HER ZAMAN işe yaramıyor mu?

ssl  openssl 

Açıklık getirmek gerekirse, Windows'dan sunulduğunda LDAPS'ın bağlantı yapıldığında CA sertifikası sunmadığı anlaşılıyor. Bu nedenle, CA X.509 sertifikasını almalı, base64 olarak dışa aktarmalı ve aşağıdaki cevaplarda açıklandığı gibi atamalısınız. Benim durumumda, python-ldap kullanarak GLOBAL kapsamına (ldap.initialize () örneğiniz değil) şu şekilde atarsınız: ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem') Bundan sonra STARTTLS'i (LDAP bağlantı noktası 389 içinde) beklendiği gibi kullanabildim.
mbrownnyc

Yanıtlar:


4

CA sertifika adı olarak gördüğüm şey budur:

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

Yukarıdaki ikinci denememde -showcerts yaptıktan sonra aldığım sertifikanın adı buydu. Bunu yaparak anahtar deposundaki certs listeledim:

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

Orada CA sertifikasını görüyorum.

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'nin sunucuyla birlikte kullandığım anahtar deposunu kullandığından emin olmak için, -CAfile bağımsız değişkenini kullanıyorum:

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

CA'nın java anahtar deposunun bir parolası olduğunu bilerek, -pass pass: password seçeneğini aşağıdaki gibi kullanmayı denedim:

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

ama bu da işe yaramadı.

Bu konuda komik olan, cacerts dosyasının üzerinde bir parola olması ve openssl'in cacerts dosyasını okuyamayacağından şikayet etmemesi. Bu benim için balık gibi görünüyor. Bu ya da başka bir şey zil mi çalıyor?


3

Bu hata, openssl'ın "Sertifika zincirini güvenilir bir köke kadar takip edemiyorum" demenin yolu. Aynı komutu kendi AD sunucularıma da uyguladım ve tam bir sertifika zinciri alıyorum, ancak üst sertifikada bu kesin hata var. Sertifikayı imzalayan CA'nın pub anahtarına sahipseniz, bunu -CAfileveya -CApathseçenekleriyle belirtebilirsiniz.


Tamam, cevap için teşekkürler. Ben de denedim. CA sertifikasını -showcerts seçeneği ile aynı şeyi yaparak diğer sertifikayı aldım. CA sertifikası bu olmalı, değil mi? Pem dosyasındaki sunucu sertifikası yerine bunu denedim ve aynı hata mesajını aldım. Başka düşünceniz var mı?

Bu durumda, geçerlilik süresi dolmak gibi başka bir nedenden dolayı doğrulamada başarısız olması muhtemeldir.
sysadmin1138

1

Çalışmak için bir LDAPS sunucusuna (Active Directory) SSL bağlantısı almaya çalışıyorum, ancak sorun yaşamaya devam ediyorum. Bunu kullanarak denedim:

OpenLDAP kullanıyorsanız şunları ayarlayabilirsiniz:

TLS_REQCERT=never

sizin de openldap.confsertifika doğrulama çalışmamak neden OpenLDAP'ı talimatını dosyası. Apache ile LDAP kimlik doğrulaması yapıyorsanız benzer bir seçenek vardır.

Gerçekten sertifika doğrulaması yapmak istiyorsanız, aşağıdakiler yardımcı olabilir:

Neyi kaçırıyorum? HER ZAMAN işe yaramıyor mu?

Ben öyle düşünmüyorum. Aşağıdakiler kesin gibi görünse de, gerçekten sadece en iyi konuğum:

Denedikleriniz yalnızca kendinden imzalı bir sertifika için işe yarar. Sertifika aslında Windows CA tarafından verildiğinden, sunucu sertifikasını bağımsız değişken olarak kullanmaya çalışmak -CAfilesize hiçbir şey alamaz.

CA sertifikasını -showcerts seçeneği ile aynı şeyi yaparak diğer sertifikayı aldım. CA sertifikası bu olmalı, değil mi?

Mutlaka hayır, hayır. Uzak sunucunun çıktısında CA sertifikası sunacağının garantisi yoktur. İlk olarak sunucu sertifikasını veren kişiye bakmanız gerekir:

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

... ve diğer sertifikalardan birinin bu sertifikayı verenle eşleşip eşleşmediğine bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.