OpenSSLのOCSPはURLEncodeされたOCSPリクエストを処理できない?その3
その2までの概要
OpenSSLのOCSPはURLEncodeされたOCSPリクエストを処理できない?その2 - Shammerismで、OpenSSLを使ってOCSPのリクエストを投げ、その応答を確認するというのをやってみた。これ自体は普通。また、OCSPのサーバはhttpでアクセスするので、どうにかcurlなどで処理させたい、と同時に、自分でそのサーバを立てる際にOpenSSLを使用できないか、という目的がありそれを試すための準備をしている。前回、既に動作しているサイトに対してOCSPのリクエストをOpenSSLで投げる方法を試してみた。次のステップはこのリクエストをURIに埋め込む方法を試してみる。
OCSPリクエストをURIに埋め込む方法
OpenSSLのocspでリクエストを投げる際に、reqoutとrespoutというオプションがあり、これを使用するとリクエストとレスポンスをファイルに書き出しておける。まずは、このreqoutでリクエストをファイルに保存する。
$ openssl ocsp -noverify -no_nonce -reqout test.req.txt -issuer DigiCertSHA2SecureServerCA.pem -cert revoked.badssl.com.pem -url "http://ocsp.digicert.com" -header "HOST" "ocsp.digicert.com" -text OCSP Request Data: ... OCSP Response Data: OCSP Response Status: successful (0x0) ... revoked.badssl.com.pem: revoked ... $
とりだしたtest.req.txtを見てみるが・・・バイナリなのか暗号化されているのかよくわからない。
$ cat test.req.txt 0Q0O0M0K0I0 +_?z??'?5΃ ?a?1a?/(?F8?,???????^? R2C???? $?kUh $
これを、openssl の enc で表示させる。
$ openssl enc -in test.req.txt -a MFEwTzBNMEswSTAJBgUrDgMCGgUABBQQX6Z6gAidtSefNc6DC0OInqPHDQQUD4Bh HIIxYdUvKOeNRji0LOHG2eICEAGvHvvdXq4JUjILJP5rVWg= $
何かそれっぽいのになる。-out を付けることで、この結果を-outで指定したファイルに書き出しておくこともできる。これで第一段階は完了。
curlでOCSPのリクエストを投げる
OCSPのURLは、これまでと同じ。これに先に複合化した(?)文字列を追加してやればいい。エンコードされたリクエストを投げることになるので、念の為--urlのオプションはダブルクォートで囲む。
$ curl -v --url "http://ocsp.digicert.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBQQX6Z6gAidtSefNc6DC0OInqPHDQQUD4BhHIIxYdUvKOeNRji0LOHG2eICEAGvHvvdXq4JUjILJP5rVWg=" * Trying 72.21.91.29... * Connected to ocsp.digicert.com (72.21.91.29) port 80 (#0) > GET /MFEwTzBNMEswSTAJBgUrDgMCGgUABBQQX6Z6gAidtSefNc6DC0OInqPHDQQUD4BhHIIxYdUvKOeNRji0LOHG2eICEAGvHvvdXq4JUjILJP5rVWg= HTTP/1.1 > Host: ocsp.digicert.com > Accept: */* > < HTTP/1.1 200 OK ... < Content-Type: application/ocsp-response ... 0??... $
応答は暗号化されていてよくわからないが、200 OK であること、その応答がocsp-responseであることがわかる。方法としてはこれでいいらしい。OpenSSLで実行したocspサーバーもこれと同じような応答を返してくれれば、OpenSSLでこれができるということになりそうだ。返してくれないようなら、OpenSSLのocspサーバーはURIにOCSPリクエストを埋め込みしたものは対応していない、ということになりそうだ。