クライアント証明書の情報をApache経由でTomcatで受け取るののサンプルを動かしてみた。

意外とぴろっといけた。
こういう感じで。
ブラウザ(IE

Apache
(クライアント認証を終端)

Tomcat5:8080
ApacheTomcat間はhttp)

jspでHttpServletRequestの情報を取得

一番苦戦したのは、クライアント認証のとこ。なんか、3年とか短いべ、って思って後ろに0くっつけて作ったら、途中でエラーに。エラーになったところから元に戻して、やってみたけど、なんか、有効期限切れとか出る。クライアント証明書の期限は正しいけど、CAの期限が1904年くらいだったかな?になっててなかなか気づけず。最初からやり直しましたです。

で、ここら辺の情報は苦なく取れたっぽい。
Apacheには

SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

ProxyPass ajp://localhost:8009/jsp-examples/

ってらへんの呪文を書いて、Javaのほうで

X509Certificate certs =
(X509Certificate
)request.getAttribute("javax.servlet.request.X509Certificate");

とかで取れるぽい。まあ、これでいいのかはあんまりまだ考えてないですけどもぁ。

SerialNumber = [17932628498249950513]
NotBefore = [Wed Jun 02 19:35:18 JST 2010]
NotAfter = [Sat Jun 01 19:35:18 JST 2013]
IssuerDN = [EMAILADDRESS=harupu@sagittarius.dip.jp, CN=Harupu CA,
OU=Admin, O=Harupu CA, ST=TOKYO, C=JP]
SubjectDN = [EMAILADDRESS=harupu@sagittarius.dip.jp, CN=harupu, OU=BalckCats, O=sagittarius.dip.jp, L=BUNKYO, ST=TOKYO, C=JP]

これ、Stringとかで取れてる(クラスはPrincipalってやつだけどStringで取るしかない?)気がするけど、カンマでsplitとかすんのかな?無理やりっぽい。