“SSL3_READ_BYTES: sslv3 uyarı hatalı sertifikası” uyarısı, SSL'nin başarısız olduğunu gösteriyor mu?


17

Aşağıdaki komutu çalıştırırken openssl s_client -host example.xyz -port 9093

Aşağıdaki hatayı alıyorum:

139810559764296:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1259:SSL alert number 42
39810559764296:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:

Ama sonunda "Verify return code: 0 (ok)"mesaj alıyorum.

Sorum, yukarıdaki uyarının neyi ifade ettiği ve SSL'nin gerçekten başarılı olup olmadığıdır. Şimdiden yardım için çok teşekkürler.

SSL handshake has read 6648 bytes and written 354 bytes
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol  : TLSv1.2
Cipher    : AES128-SHA
Session-ID: xx
Session-ID-ctx:
Master-Key: xx
Key-Arg   : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1475096098
Timeout   : 300 (sec)
**Verify return code: 0 (ok)**

Yanıtlar:


25

"El sıkışma hatası", el sıkışmasının başarısız olduğu ve SSL / TLS bağlantısı olmadığı anlamına gelir. opensslKabuktan (veya CMD vb.) Çıkıldığını ve giriş verilerinin sunucuya gönderilmesini beklemediğini görmelisiniz . Hiçbir sorun olduğu anlamına gelir "dönüş kodu 0 doğrulama" bulundu , Sunucu sertifikasında ya da (OpenSSL çekleri kapak şeyi yok ki, gidip kadarıyla) hiç veya kontrol edildi çünkü kontrol ve iyi değildi çünkü; bu durumda protokolü bilerek ikinci durumun geçerli olduğunu çıkarabiliriz.

Uyarı almakbad certificate (kod 42) , sunucunun bir sertifika ile kimlik doğrulaması yapmanızı istediğini ve bunu yapmadığınızı ve el sıkışmasının başarısız olmasına neden olduğu anlamına gelir . Satırdan birkaç satır önce, genellikle CA'ları tanımlayan birkaç satır, muhtemelen bir satır başlangıcı ve belki de OpenSSL sürümünüze ve anlaşmalı protokole bağlı olarak SSL handshake has read ... and written ...bir satır görmelisiniz .Acceptable client certificate CA namesClient Certificate TypesRequested Signature Algorithms

'Kabul edilebilir' listesinde bir CA tarafından verilen bir sertifika bulun veya boşsa, hangi CA'lara güvendiğini söyleyen veya sunucuyla ilgili dokümanları arayın veya sunucu operatörleri veya sahipleriyle iletişim kurun ve onlara sorun, ayrıca eşleşen özel anahtarı , her ikisi de PEM biçiminde, ve bunları belirtmek ile -cert $file -key $file; eğer PEM ile mümkün olduğunca tek bir dosyada varsa,-cert $file. Bunları farklı bir biçimde kullanıyorsanız, belirtin veya burada ve belki de süper kullanıcı ve güvenlik arasında arama yapın. çeşitli sertifika ve özel formatları dönüştürme hakkında zaten birçok soru ve cevap var. Sertifikanızın doğrulanması için bir "zincir" veya "ara" sertifikasına (veya birden fazlasına) ihtiyacı varsa, sunucunun nasıl yapılandırıldığına bağlı olarak, genel bir CA'dan (dahili olana karşı) bir sertifikada olduğu gibi, s_clientbir hile gerektirir: ya zincir sertifikalarını sistem güven mağazanıza ekleyin ya da sunucu PLUS'u göndermeniz gereken zincir sertifikalarını doğrulamak için ihtiyacınız olan CA sertifikalarını içeren yerel / geçici bir güven deposu oluşturun.

Böyle bir sertifikanız yoksa ya bir sertifika almanız gerekir, bu da cevaplanması çok daha fazla ayrıntı gerektiren farklı bir sorudur ya da sertifika kimlik doğrulaması kullanmadan sunucuya bağlanmanın bir yolunu bulmanız gerekir; belgeleri tekrar kontrol edin ve / veya operatörlere / sahiplere sorun.

DÜZENLEME: Yorumdan, istemci anahtarının ve sertifika zincirinin yanı sıra Java'da sunucu bağlantı (ları) nız olabilir. Kontrol ederken, bu durumu tam olarak kapsayan iyi bir mevcut cevap görmüyorum, bu yüzden bu muhtemelen iyi arama yapmayacak olsa da:

# Assume Java keystore is type JKS (the default but not only possibility)
# named key.jks and the privatekey entry is named mykey (ditto)
# and the verify certs are in trust.jks in entries named trust1 trust2 etc.

# convert Java key entry to PKCS12 then PKCS12 to PEM files
keytool -importkeystore -srckeystore key.jks -destkeystore key.p12 -deststoretype pkcs12 -srcalias mykey 
openssl pkcs12 -in key.p12 -nocerts -out key.pem
openssl pkcs12 -in key.p12 -nokeys -clcerts -out cert.pem
openssl pkcs12 -in key.p12 -nokeys -cacerts -out chain.pem
# extract verify certs to individual PEM files
# (or if you 'uploaded' PEM files and still have them just use those)
keytool -keystore trust.jks -export -alias trust1 -rfc -file trust1.pem
keytool -keystore trust.jks -export -alias trust2 -rfc -file trust2.pem
... more if needed ...
# combine for s_client 
cat chain.pem trust*.pem >combined.pem
openssl s_client -connect host:port -key key.pem -cert cert.pem -CAfile combined.pem

Merhaba Dave; aşağıda izlediğimiz prosedür. 1: Kök CA'yı yükleyin ve ara sertifikaları anahtar deposuna yükleyin. 2: İmzalı Comodo sertifikasını anahtar deposuna yükleyin. 3: Kök CA'yı ve ara sertifikaları güven deposuna yükleyin. 4: Anahtar deposunu ve güvenilir depo dosyalarını kümedeki her düğüme (cassandra) kopyalayın. Düğümler iletişim için SSL kullanır ve sorunsuz bir şekilde verileri elden geçirmiş gibi görünürler. Ancak yukarıda belirtilen SSL komutunu çalıştırdığımda sorun artıyor.
kris433

@ kris433: Bu hangi anahtar deposu? Tanımladığınız prosedür, 'imzalanmış Comodo sertifikasını' aldığınız (ed) zaten bir özelleştirme oluşturduysa, Java için olana benziyor, ancak standart bir Java yüklemesi kullanıyorsanız, varsayılan Comodo içeren truststore, bunu değiştirmenize gerek yok. OpenSSL herhangi bir Java anahtar deposu veya güven deposu kullanmaz ve varsayılan olarak hiç anahtar deposu kullanmaz, bu nedenle -cert [-key] ile dosya belirtmeniz gerekir. Yorumunuzu doğru yorumladıysam, düzenleme bölümüne bakınız.
dave_thompson_085

Çok teşekkürler Dave. Bu mükemmel çalıştı. Haftamı kurtardın. Philadelphia'ya gelirseniz, peynirli biftek ve Gelato benden;). Tekrar teşekkürler.
kris433

@ kris433: Hoş geldiniz, ancak StackExchange Resmi Yolu onay işaretini kullanarak yararlı bir yanıtı kabul etmektir, böylece sistem bu bilgileri diğer sorgulara otomatik olarak göstererek kullanabilir; bu siteye geldiğinizde bakmanız gereken ' tur'a veya daha spesifik olarak serverfault.com/help/someone-answers adresine bakın .
dave_thompson_085

0

Benim durumumda, özel anahtar sertifika ile eşleşmediğinde bu hatayı aldım. Madenimin süresi dolduğunda ve yeni bir özel anahtar oluşturmanız gerektiğinde sertifikayı güncellemiştim. Ancak, benim app bunu referans unuttum. Yeni özel anahtara işaret ettiğimde - bu hata ortadan kalktı.

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.