jetty 6.xhttpsアクセス双方向認証構成方法
新しく開発した応用にhttps方式のアクセスをするつもりで、双方向認証の方式(つまりクライアントはサーバー側の証明書を検証する必要があり、サーバー側もクライアント側の証明書を検証する必要がある)を採用して、ネット上で半日探して、すべて東から西へと一言で、比較的に完備していないで、1回の紆余曲折を経て、ついに組み立てました.サーバ側とクライアント側に先に証明書(opensslを使用しています) サーバ側の個人証明書(秘密鍵付き)と信頼できるCAルート証明書とクライアント証明書を含むサーバ側のkeystoreを作成します. 構成jetty.xmlは、ポート番号、keystoreライブラリの場所、truststoreライブラリの場所、パスワード、双方向認証などのhttpsパラメータを設定します.
1、opensslで証明する
#現在のディレクトリの下にopensslを作成します.cnfプロファイルはopensslインストールディレクトリからコピーでき、主にstring_を変更します.mask、nombstrからutf 8 onlyに変更
string_mask = utf8only
#ルート証明書秘密鍵の作成openssl genrsa-des 3-out cakey.pem-passout pass:12345678 1024#自己署名のルート証明書openssl req-utf 8-new-x 509-days 7300-key cakeyを作成する.pem -passin pass:12345678 -out cacert.crt -config openssl.cnf -set_serial 1-subj"/CN=XX証明書センター/OU=XX証明書センター/O=XXXX会社"#サーバの秘密鍵を作成#openssl genrsa-des 3-out server.key 1024
#サーバの署名待ち証明書openssl req-utf 8-new-key serverを作成します.key -days 7300 -out server.csr-passin pass:12345678-passout pass:12345678-subj/CN=localhost/OU=XX証明書センター/O=XXXX会社#署名サーバ証明書(pemフォーマット)opensslca-utf 8-config openssl.cnf -passin pass:12345678 -batch -in server.csr -out server.crt#秘密鍵付きpkcs 12フォーマットサーバ証明書openssl pkcs 12-export-inkey serverを生成する.key -in server.crt -out server.pfx-passin pass:12345678-passout pass:12345678#変換pem(base 64)符号化フォーマットのサーバ証明書はder(バイナリ)符号化フォーマットopenssl x 509-in serverである.crt -inform pem -out server.der -outform der
#クライアント証明書生成は、サーバ生成手順に従って再実行されます(ルート証明書は再生成する必要はありません).
2、証明書をkeystoreにインポートする
#サーバ個人証明書(秘密鍵付き)をkeystoreにインポートkeytool-importkeystore-srckeystore server.pfx-srcstoretype PKCS 12-keystore server.jks-srcstorepass 12345678-deststorepass 12345678
#caルート証明書とクライアント証明書を信頼できる証明書チェーンのkeytool-import-keystore serverにインポートします.jks -keypass 12345678 -storepass 12345678 -alias ca -trustcacerts -file cacert.crt keytool -import -keystore server.jks -keypass 12345678 -storepass 12345678 -alias client -trustcacerts -file client.der
3、jetty.xmlの構成(コンパクトで、1つのアプリケーションしか実行されず、スレッド数も設定されていない)
構成が完了したらjettyを実行し、コンソールウィンドウの出力に起動情報を表示します.
4、ブラウザにルート証明書cacertをインポートする.crtとクライアント証明書client.pfx、そしてアクセス
http://localhost:8443/
1、opensslで証明する
#現在のディレクトリの下にopensslを作成します.cnfプロファイルはopensslインストールディレクトリからコピーでき、主にstring_を変更します.mask、nombstrからutf 8 onlyに変更
string_mask = utf8only
#ルート証明書秘密鍵の作成openssl genrsa-des 3-out cakey.pem-passout pass:12345678 1024#自己署名のルート証明書openssl req-utf 8-new-x 509-days 7300-key cakeyを作成する.pem -passin pass:12345678 -out cacert.crt -config openssl.cnf -set_serial 1-subj"/CN=XX証明書センター/OU=XX証明書センター/O=XXXX会社"#サーバの秘密鍵を作成#openssl genrsa-des 3-out server.key 1024
#サーバの署名待ち証明書openssl req-utf 8-new-key serverを作成します.key -days 7300 -out server.csr-passin pass:12345678-passout pass:12345678-subj/CN=localhost/OU=XX証明書センター/O=XXXX会社#署名サーバ証明書(pemフォーマット)opensslca-utf 8-config openssl.cnf -passin pass:12345678 -batch -in server.csr -out server.crt#秘密鍵付きpkcs 12フォーマットサーバ証明書openssl pkcs 12-export-inkey serverを生成する.key -in server.crt -out server.pfx-passin pass:12345678-passout pass:12345678#変換pem(base 64)符号化フォーマットのサーバ証明書はder(バイナリ)符号化フォーマットopenssl x 509-in serverである.crt -inform pem -out server.der -outform der
#クライアント証明書生成は、サーバ生成手順に従って再実行されます(ルート証明書は再生成する必要はありません).
2、証明書をkeystoreにインポートする
#サーバ個人証明書(秘密鍵付き)をkeystoreにインポートkeytool-importkeystore-srckeystore server.pfx-srcstoretype PKCS 12-keystore server.jks-srcstorepass 12345678-deststorepass 12345678
#caルート証明書とクライアント証明書を信頼できる証明書チェーンのkeytool-import-keystore serverにインポートします.jks -keypass 12345678 -storepass 12345678 -alias ca -trustcacerts -file cacert.crt keytool -import -keystore server.jks -keypass 12345678 -storepass 12345678 -alias client -trustcacerts -file client.der
3、jetty.xmlの構成(コンパクトで、1つのアプリケーションしか実行されず、スレッド数も設定されていない)
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<Set name="ThreadPool">
<New class="org.mortbay.thread.BoundedThreadPool">
<Set name="minThreads">1</Set>
<Set name="maxThreads">5</Set>
</New>
</Set>
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.security.SslSelectChannelConnector">
<Set name="Port"><SystemProperty name="jetty.port" default="8443"/></Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Acceptors">1</Set>
<Set name="AcceptQueueSize">100</Set>
<Set name="keystore"><SystemProperty name="jetty.home" default="." />/etc/server.jks</Set>
<Set name="password">12345678</Set>
<Set name="keyPassword">password</Set>
<Set name="truststore"><SystemProperty name="jetty.home" default="." />/etc/server.jks</Set>
<Set name="trustPassword">12345678</Set>
<Set name="needClientAuth">true</Set>
</New>
</Arg>
</Call>
<Set name="handler">
<New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.mortbay.jetty.Handler">
<Item>
<New class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="contextPath">/</Set>
<Set name="resourceBase">webapp/</Set>
<Call name="addServlet">
<Arg>org.mortbay.jetty.servlet.DefaultServlet</Arg>
<Arg>/</Arg>
</Call>
</New>
</Item>
</Array>
</Set>
</New>
</Set>
</Configure>
構成が完了したらjettyを実行し、コンソールウィンドウの出力に起動情報を表示します.
4、ブラウザにルート証明書cacertをインポートする.crtとクライアント証明書client.pfx、そしてアクセス
http://localhost:8443/