"핸드 셰이크 실패"는 핸드 셰이크에 실패했으며 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 Algorithms
OpenSSL 버전과 협상 된 프로토콜 에 따라 줄이 있을 수 있습니다.
인증서 찾기 '허용'목록에서 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