Checking A Remote Certificate Chain With OpenSSL
If you deal with SSL/TLS long enough you will run into situations where you need to examine what certificates are being presented by a server to the client. The best way to examine the raw output is via (what else but) OpenSSL. First let’s do a standard
langui.sh
2009년도 문서지만, 응용이 가능 할 것으로 보입니다.
명령어의 옵션이 바뀐 부분이 있습니다...
오랫동안 SSL / TLS를 다루다 보면 서버가 클라이언트에 제공하는 인증서를 조사해야하는 상황에 처하게 될 것입니다.
이런 원본 데이터 결과글 검사하는 최고의 방법은 OpenSSL을 사용하는 것입니다 .
먼저 표준 웹 서버 연결을 수행해 봅시다
(원하는 경우 -showcerts는보다 광범위한 구문 분석을 위해 PEM 인코딩 인증서 자체를 덤프합니다. 아래 출력은 가독성을 위해 잘라냈습니다.)
$>openssl s_client -showcerts -connect www.domain.com:443
CONNECTED(00000003)
--snip--
---
Certificate chain
0 s:/C=US/ST=Texas/L=Carrollton/O=Woot Inc/CN=*.woot.com
i:/C=US/O=SecureTrust Corporation/CN=SecureTrust CA
-----BEGIN CERTIFICATE-----
--snip--
-----END CERTIFICATE-----
1 s:/C=US/O=SecureTrust Corporation/CN=SecureTrust CA
i:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority
-----BEGIN CERTIFICATE-----
--snip--
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=Texas/L=Carrollton/O=Woot Inc/CN=*.woot.com
issuer=/C=US/O=SecureTrust Corporation/CN=SecureTrust CA
---
No client certificate CA names sent
---
SSL handshake has read 2123 bytes and written 300 bytes
--
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
--snip--
해당 명령으로 수행하면 많은 데이터 표출 되기 때문에 가독성을 높이기 위해 여러 섹션을 잘랐습니다.
주요 내용:
1. 인증서 체인은 두 개의 인증서로 구성됩니다.
레벨 0에는 일부 구문 분석 정보가있는 서버 인증서가 있습니다.
s :는 인증서의 제목 줄이고 i :는 발급 CA에 대한 정보를 포함합니다.
2.이 특정 서버 (www.woot.com)는 중간 인증서도 보냈습니다.
제시된 체인의 각 인증서에 대한 주제 및 발급자 정보가 제공됩니다.
체인의 길이는 인증서 2 개보다 훨씬 길 수 있습니다.
3. 서버 인증서 섹션은 체인에서 레벨 0의 중복입니다.
만약 최종 엔터티 인증서만 찾는 경우이면 이 섹션에서 둘러보면 빠르게 찾을 수 있습니다.
4. 클라이언트 인증서 CA가 전송되지 않았습니다.
서버가 클라이언트 인증서를 잠재적으로 허용하도록 구성된 경우 수신 된 데이터 내용에 "acceptable client CAs"목록이 포함됩니다.
5. TLSv1/SSLv3을 통해 연결되었으며 선택한 암호는 RC4-MD5입니다. 참고로 이것은 일반적으로 연결하려는 서버가 IIS임을 의미합니다.
하지만 포트 443에서 bog 표준 웹 서버가 아닌 다른 서버로 연결하려면 어떻게해야 할까요?
음, 만약 당신이 가용한 starttls를 사용해야한다면.
OpenSSL 0.9.8부터는 starttls 옵션으로 smtp, pop3, imap 및 ftp 중에서 선택할 수 있습니다.
특정 SSL 버전을 사용하여 확인해야하는 경우 (아마도 해당 방법을 사용할 수 있는지 확인하기 위해) 그렇게 할 수도 있습니다.
-ssl2, -ssl3, -tls1 및 -dtls1은 모두 여기에서 선택할 수 있는 옵션들입니다.
openssl s_client -showcerts -ssl2 -connect www.domain.com:443
다음과 같이,
필요한 연결 문제에 대한 디버깅이 필요한 경우 클라이언트 인증서를 넣어서 시도 해 볼 수도 있습니다.
openssl s_client -showcerts -cert cert.cer -key cert.key -connect www.domain.com:443
그리고 SSL 핸드 셰이크를 정말 좋아하는 사람들을 위해 허용되는 암호를 지정할 수도 있습니다.
openssl s_client -showcerts -cipher DHE-RSA-AES256-SHA -connect www.domain.com:443
위에서 사용 된 암호는 거의 모든 Apache 서버에서 작동하지만 256 비트 AES 암호화가 지원되지 않는 IIS에서는 실패 할 것입니다.
1. 우리가 사용하는 s_client 명령은 대화 형 소켓을 열고 자동으로 쉘 프롬프트로 돌아 가지 않습니다. 따라서 프로세스를 종료하려면 control-c를 누르거나 무언가를 입력하고 return을 눌러야한다는 것을 기억하고 있어야 할 것입니다.
2.이 예제에서 SSLv2 전용 연결 시도에 대해서만 보여주고 있습니다. 당신이 제어하는 모든 웹 서버에서 SSLv2를 비활성화 되어야 합니다. 이 프로토콜은 다양한 결함이 있으며 10 년 동안에 SSLv3 / TLSv1로 대체되었습니다.
3.이 예에서는 PEM 형식의 인증서와 개인 키가 필요합니다.
-certform DER 및 -keyform DER (OpenSSL 0.9.8 이상 만 해당) 옵션을 추가로 넣어 주면 DER에서 얻을 수 있습니다.
4. "openssl ciphers"를 입력하여 사용 가능한 암호 목록을 찾을 수 있지만, 유형 및 강도별로 정렬하는 방법 또한 무수히 많습니다.
자세한 내용은 ciphers 매뉴얼 페이지를 참조하십시오.
이상.
'이것저것' 카테고리의 다른 글
버추얼박스에 요세미티 설치하기 (0) | 2023.01.08 |
---|---|
Java Keystore에 Trusted 인증서들을 설치하기 (0) | 2023.01.07 |
[JMeter] 파일을 이용한 서버 성능 측정 사용 (1) | 2023.01.03 |
Windows에서 ASP.NET 임시 파일을 지우는 방법 (0) | 2022.12.23 |
[C#] PublicKeyToken=null - DLL 서명하기 (0) | 2022.12.22 |