SSL이 실패했음을 나타내는 경고 "SSL3_READ_BYTES : sslv3 경고 불량 인증서"입니까?


17

아래 명령을 실행하는 동안 openssl s_client -host example.xyz -port 9093

다음과 같은 오류가 발생합니다.

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:

그러나 결국 나는 "Verify return code: 0 (ok)"메시지를 받는다 .

내 질문은 위의 경고가 무엇을 의미하며 SSL이 실제로 성공했는지 여부입니다. 미리 도움을 주셔서 감사합니다.

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)**

답변:


25

"핸드 셰이크 실패"는 핸드 셰이크에 실패했으며 SSL / TLS 연결이 없음을 의미합니다. 당신은 볼 수 openssl쉘 (또는 CMD 등)을 종료하고 서버로 전송되는 입력 데이터를 기다리지 않습니다. 문제가되었음을 의미 "리턴 코드 0 확인" 발견 , 서버의 인증서를 중 하나가 (OpenSSL을 수표 커버 모든 것을하지 않는, 가서까지로) 전혀 또는 체크 때문에 확인하고 좋았다되지 않았기 때문에; 이 경우, 프로토콜을 알면 후자의 경우를 추론 할 수 있습니다.

경고 수신bad certificate (코드 42) 은 서버 가 인증서로 인증요구 하고이를 수행하지 않았으며 핸드 셰이크 실패를 유발했음을 의미합니다. 줄 앞의 몇 줄에는 일반적으로 SSL handshake has read ... and written ...한 줄 Acceptable client certificate CA names뒤에 CA를 식별하는 몇 줄이 표시되고, 그 뒤에 줄이 시작될 수 Client Certificate Types있으며 Requested Signature AlgorithmsOpenSSL 버전과 협상 된 프로토콜 에 따라 줄이 있을 수 있습니다.

인증서 찾기 '허용'목록에서 CA 발행을하거나 CA를가 신뢰 나하는 말을 서버 나에 대한 설명서 빈 모습이었다 경우 접촉 서버 운영자 또는 소유자와 그들에게, 플러스 일치하는 개인 키 , 두 PEM 형식으로, 그들을 지정-cert $file -key $file; PEM으로 가능한 한 두 파일을 모두 가지고 있다면-cert $file. 다른 형식으로 된 경우 지정하거나 여기에서 검색하고 수퍼 유저 및 보안을 검색하십시오. 다양한 인증서 및 개인 키 형식을 변환하는 데 대한 많은 Q & A가 이미 있습니다. 인증서가 "체인"또는 "중간"인증서 (또는 둘 이상)를 검증해야하는 경우, 서버 구성 방식에 따라 공용 CA (사내 인증서와 비교)의 인증서가 종종 발생하는 것처럼, s_client트릭이 필요합니다. 체인 인증서를 시스템 신뢰 저장소에 추가하거나 서버와 함께 전송해야하는 체인 인증서를 확인하는 데 필요한 CA 인증서를 포함하는 로컬 / 임시 신뢰 저장소를 작성하십시오.

그러한 인증서가없는 경우,보다 자세한 답변이 필요한 다른 질문이거나 인증서 인증을 사용하지 않고 서버에 연결할 수있는 방법을 찾아야합니다. 설명서를 다시 확인하거나 운영자 / 소유자에게 문의하십시오.

편집 : 주석에서 클라이언트 키와 인증서 체인뿐만 아니라 Java의 서버 앵커가있을 수 있습니다. 확인하면 해당 사례를 완전히 다루는 기존의 좋은 답변을 볼 수 없으므로 검색이 잘되지는 않지만 :

# 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

안녕 데이브; 다음은 우리가 따르는 절차입니다. 1 : 루트 CA 및 중간 인증을 키 저장소에 업로드하십시오. 2 : 서명 된 Comodo 인증서를 키 저장소에 업로드하십시오. 3 : 루트 CA 및 중간 인증서를 신뢰 저장소에 업로드하십시오. 4 : 키 저장소 및 신뢰 파일을 클러스터의 모든 노드 (cassandra)에 복사하십시오. 노드는 통신에 SSL을 사용하며 문제없이 데이터를 발굴하는 것처럼 보입니다. 그러나 위에서 언급 한 SSL 명령을 실행하면 문제가 발생합니다.
kris433

@ kris433 : 그 키 저장소는 무엇입니까? 설명하는 절차는 표준 Java 설치를 사용하는 경우 기본값이 있지만 '서명 된 Comodo cert'를 확보 한 개인 키를 이미 생성 한 경우 (및 경우에만) Java의 절차와 같습니다. Comodo가 포함 된 신뢰 저장소이므로이를 변경할 필요가 없습니다. OpenSSL은 Java 키 저장소 또는 신뢰 저장소를 사용하지 않으며 기본적으로 키 저장소를 전혀 사용하지 않으므로 -cert [-key]로 파일을 지정해야합니다. 귀하의 의견을 올바르게 해석 한 경우 편집을 참조하십시오.
dave_thompson_085

고마워 데이브. 이것은 완벽하게 작동했습니다. 당신은 내 주를 저장했습니다. 필라델피아에 오면 치즈 스테이크와 젤라또가 나에게 있습니다.). 다시 감사합니다.
kris433

@ kris433 : 환영하지만 StackExchange 공식 방법은 확인 표시를 사용하여 유용한 답변을 수락하는 것이므로 시스템은이 정보를 자동으로 다른 요청자 에게 결과를 표시 할 수 있습니다 . 이 사이트를 방문했을 때 보았던 '투어'또는보다 구체적으로 serverfault.com/help/someone-answers를 참조하십시오 .
dave_thompson_085

0

내 경우 개인 키가 인증서와 일치하지 않으면이 오류가 발생했습니다. 인증서가 만료되어 새 개인 키를 만들어야 할 때 인증서를 업데이트했습니다. 그러나 앱에서이를 참조하는 것을 잊었습니다. 새 개인 키를 가리킬 때이 오류가 사라졌습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.