OCSP 검증해보기
오늘 StartSSL에서 인증서를 발급 받았습니다.
그런데, firefox에서 접근하니 OCSP 검증이 잘 안되는지 에러페이지가 아래와 같이 뜨는 것입니다.
<div>
<h3>보안 연결 실패</h3>
<p>www.dgkim.net에 접속하는 중에 오류가 발생했습니다.</p>
<p>OCSP 서버가 인증서에 대한 상태를 유지하고 있지 않습니다.</p>
<p> (오류 코드: sec_error_ocsp_unknown_cert) </p>
<ul>
<li>받은 데이터의 내용 사실 검증을 할 수 없기 때문에 보려고 시도하신 페이지를 보여드릴 수 없습니다.</li>
<li>웹 사이트 관리자에게 현재 문제를 알려 주시거나, 다른 방법으로 도움말 메뉴의 웹 사이트 문제 보고를 이용해 주시기 바랍니다.</li>
</ul>
</div>
그래서, ocsp 검증을 해보기로 했습니다. [1]
$ openssl ocsp \
> -issuer level1.crt \
> -url http://ocsp.startssl.com/sub/class1/server/ca \
> -no_nonce \
> -cert level0.crt
Error querying OCSP responsder
17384:error:27075072:OCSP routines:PARSE_HTTP_LINE1:server response error:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/ocsp/ocsp_ht.c:224:Code=400,Reason=Bad Request
$
level1.crt : intermediate CA인증서 level0.crt : 검증해볼 서버인증서 url : 서버인증서에 ocsp url이 있습니다.
서버가 400 bad request라고 하네요. 잘되는 kldp사이트 인증서로 해도 에러가 나는 것입니다. startssl openssl ocsp 확인해 보니, openssl과 startssl 호환 문제가 있는 것이 확인됩니다. [2] openssl이 Host헤더를 보내지 않아서, akamai를 쓰는 startssl에서 안 되는 것입니다.
tcpdump를 떠보니 http요청이지만, post내용이 바이너리입니다. 즉, 간단한 telnet으로는 할 수 없다.
openssl에서는 아래 방법으로 ocsp request를 파일로 떨굴수 있습니다.
$ openssl ocsp \
> -issuer level1.crt \
> -url http://ocsp.startssl.com/sub/class1/server/ca \
> -no_nonce \
> -cert level0.crt \
> -reqout req.der
그러면, 이제 위에서 떨군 파일을 http post 해봅니다. telnet으로는 안되고, curl을 사용합니다.
$ curl \
> --header "Host: ocsp.startssl.com" \
> --header "Content-Type: application/ocsp-request" \
> http://ocsp.startssl.com/sub/class1/server/ca \
> -v \
> --upload-file req.der \
> --request POST > response.der
host 헤더를 넣어주었습니다. content-type을 tcpdump에서 확인했던 것으로 넣었습니다. upload-file을 통해서 binary 내용을 올릴 수 있습니다. request에서 POST를 넣어준 것은 upload-file이 PUT을 사용하기 때문입니다.
이제, ocsp응답을 response.der 파일로 받았습니다.
다시 한번 ocsp명령으로 response를 까봅니다. (물론 바이너리 파일입니다.)
$ openssl ocsp \
> -respin response.der \
> -CAfile cabundle.pem \
> -text
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: C = IL, O = StartCom Ltd. (Start Commercial Limited), CN = StartCom Class 1 Server OCSP Signer
Produced At: Nov 18 00:34:46 2013 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 6568874F40750F016A3475625E1F5C93E5A26D58
Issuer Key Hash: EB4234D098B0AB9FF41B6B08F7CC642EEF0E2C45
Serial Number: 0CFD8F
Cert Status: unknown
This Update: Nov 18 00:34:46 2013 GMT
Next Update: Nov 20 00:34:46 2013 GMT
응답을 받았습니다. 헛, 그런데 cert status가 unknown이네요?