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つのアプリケーションしか実行されず、スレッド数も設定されていない)
    <?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/