クライアント証明書の情報をApache経由でTomcatで受け取るののサンプルを動かしてみた。
意外とぴろっといけた。
こういう感じで。
ブラウザ(IE)
↓
Apache
(クライアント認証を終端)
↓
Tomcat5:8080
(Apache⇔Tomcat間は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とかすんのかな?無理やりっぽい。