SSL 장애 분석을 위한 openssl 도구
SSL 악수 프로토콜
우선 SSL 프로토콜이 연결되는 과정을 간단하게 소개합니다.그림 1과 같이 다음과 같은 몇 가지 프로세스가 있습니다.
그림 1.SSL 인증 및 키 협상 절차
hello
메시지를 포함하고 클라이언트가 지원하는 암호 알고리즘과 SSL 프로토콜의 버전 메시지와 키 생성에 사용되는 무작위 수를 첨부합니다.hello done
"메시지를 보냅니다.또한 서버가 클라이언트에 대한 인증을 필요로 한다면 서버 측은 클라이언트 인증서를 요청하는 메시지를 보낼 것입니다.hello done
'를 받으면 서버 측의 디지털 인증서를 인증하고 서버 측에서 선택한 알고리즘이 가능한지 확인합니다.서버가 클라이언트 신분 인증을 요구하면 클라이언트는 자신의 키 인증서를 발송합니다.페이지 맨 위로 돌아가기
s_client 소개
openssl은 SSL 프로토콜의 오픈 소스 코드를 제공합니다. 세 가지 부분을 포함합니다. ssl 라이브러리, 복호화 라이브러리와 명령행 도구입니다.명령행 도구에서 s_client는 원격 서버에 SSL 프로토콜로 연결된 클라이언트 프로그램으로 이 도구는 테스트 진단에 사용할 수 있습니다.비록 s_클라이언트는 일부 기초 기능만 제공했지만 그 내부의 구체적인 실현에서 ssl 라이브러리의 대부분 인터페이스를 사용했다.
s_client
명령줄의 구문은 다음과 같습니다.명세서 1.s_client 매개 변수
openssl s_client [-connect host:port>] [-verify depth] [-cert filename] [-key filename]
[-CApath directory] [-CAfile filename][-reconnect] [-pause] [-showcerts] [-debug] [-msg]
[-nbio_test] [-state] [-nbio] [-crlf] [-ign_eof] [-quiet]
일반적인 매개변수의 용도는 다음과 같습니다.
페이지 맨 위로 돌아가기
s_클라이언트 SSL 악수 프로토콜에서의 응용
SSL 서버에 연결할 때 가장 흔히 볼 수 있는 문제는 클라이언트가 서버 측의 신분을 인증하는 데 실패하는 것이다. 여러 가지 원인으로 인해 이러한 실패가 발생한다. 다음은 흔히 볼 수 있는 오류를 열거하고 s_를 어떻게 응용하는지 분석했다.클라이언트가 확진을 진행하다.
명세서 2.인증서 추출
###usage: retrieve-cert.sh remote.host.name [port]
SSLHOST=$1
SSLPORT=${2:-443}
echo |\
openssl s_client -connect ${SSLHOST}:${SSLPORT} 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
openss verify server.pem
.인증서 내용이 변경되면 실행 결과는 목록 4와 같습니다.
명세서인증서 인증 실패
[root@wks547385wss openssl]# openssl verify server.pem
unable to load certificate
19280:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:947:
19280:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1
error:tasn_dec.c:304:Type=X509
19280:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:82:
그렇지 않으면 우리는 인증 통과를 받을 수 있다. 결과는 다음과 같다.
명세서인증서 인증 성공
[root@wks547385wss openssl]# openssl verify server.pem
server.pem: OK
1. 파라미터
-state
를 사용하여 악수 프로토콜의 인증서 인증 실패 여부를 확인합니다.명세서SSL 악수 프로토콜 상태 표시
[root@wks547385wss openssl]# openssl s_client -connect www6.software.ibm.com:443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=1 /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
2. 운용s_client 매개 변수
-showcerts
는 서버 측의 루트 인증서를 가져옵니다. 서버 측의 인증서 체인은 모두 표시됩니다. 인증서 체인의 끝에 루트 인증서가 있습니다. 인증서 파일을 저장하는 것은 serverCA.pem 。
명세서서버 측의 루트 인증서 가져오기[root@wkswss openssl]# openssl s_client -connect www6.software.ibm.com:443 – showcerts
…
s:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
-----END CERTIFICATE-----
3. s_ 활용client 매개 변수
-CAfile CA.pem
서버 다시 연결명세서서버 인증서 파일의 SSL 연결 설정
[root@wkswss openssl]# openssl s_client -CAfile serverCA.pem -connect
www6.software.ibm.com:443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=1 /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
verify return:1
depth=0 /C=US/O=IBM/CN=www6.software.ibm.com
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
……
SSL-Session:
Protocol : TLSv1
Cipher : DES-CBC3-SHA
Session-ID: 00365044871540E334826923BF9C531CE659274858585858499C14380000000C
Session-ID-ctx:
Master-Key:
D065F1F2297560F1CD4CCC0D7A58E647CC9F596BCEC545CF90DD54659CB36C53CDAC977E5784C6
A273BA28B486E578B9
Key-Arg : None
Krb5 Principal: None
Start Time: 1234986898
Timeout : 300 (sec)
Verify return code: 0 (ok)
1. 클라이언트는 이미 서버 빌드를 가지고 있습니다.rchland.ibm.com의 루트 인증서
rochCA.pem
는 클라이언트가 서버 고객을 연결하려고 할 때 서버에 대한 인증서를 통과할 수 없습니다.명세서인증 실패
[root@wks547385wss openssl]# openssl s_client -CAfile roch.pem -state -connect
build.rchland.ibm.com:443
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=0 /serialNumber=93e352/CN=rch-fw-1a.rchland.ibm.com/unstructuredName=
rch-fw-1a.rchland.ibm.com
verify error:num=18:self signed certificate
verify return:1
depth=0 /serialNumber=93e352/CN=rch-fw-1a.rchland.ibm.com/unstructuredName=
rch-fw-1a.rchland.ibm.com
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
…
2.
x509
도구를 사용하여 루트 인증서의 구체적인 내용, 특히 인증서 발급자와 소지자의 신분을 확인한다. 명세서 10과 같다.명세서루트 인증서 디코딩
[root@wks547385wss openssl]# openssl x509 -text -in roch.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 903804111 (0x35def4cf)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
Validity
Not Before: Aug 22 16:41:51 1998 GMT
Not After : Aug 22 16:41:51 2018 GMT
Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
상술한 인증서 발급자 정보가 있으면 우리의 문제는 쉽게 해결됩니다. 클라이언트는 방화벽에서 온 인증서를 받았습니다. 이 인증서와 방화벽 뒤에 있는 서버의 디지털 인증서는 서로 다른 발급자에서 왔습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Azure AD에서 FIDO 키로 로그인 1 (설정 사용 - 브라우저 로그인)이번 보안 키는 을 사용합니다. 먼저 Azure AD 테넌트 측에서 FIDO 키를 사용할 수 있도록 설정해야 합니다. Azure 포털에 로그인 먼저 사용자가 미리보기 기능을 사용할 수 있도록 허용해야 합니다. 포털에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.