Tomcat4.1でSSLを使う
結構うまくいかないものなので、まとめておく。
1.keytoolを使ってプライベートRSAキーを生成する
1. keytoolはJDKのインストールディレクトリのbinの中にある。コマンドプロンプトで次のように入力する
keytool -genkey -alias tomcat -keyalg RSA
2.パスワードを聞いてくるので、適当に入力する
3. 「姓名を入力してください」と聞かれるが、ここではサーバーのホスト名かIPアドレスを入れる
自分のPCでテスト用のときは、localhost でよい
4. 以下、いろいろ聞かれるが、適当に入力する
5. 〜でよろしいですか、の後で鍵のパスワードを聞かれる。かならず2と同じパスワードを入力する。
これで、自分のホームディレクトリに .keystore というファイルができる。
2.証明書に自己署名をする
1. 以下のコマンドで署名できる。
keytool -selfcert -alias tomcat
ちなみに、本番の場合は認証局から署名をもらう。
以上の入力を載せると、次のようになる。(太字が入力部分)
>keytool -genkey -alias tomcat -keyalg RSA キーストアのパスワードを入力してください: hogehoge 姓名を入力してください。 [Unknown]: localhost 組織単位名を入力してください。 [Unknown]: localhost 組織名を入力してください。 [Unknown]: localhost 都市名または地域名を入力してください。 [Unknown]: localhost 州名または地方名を入力してください。 [Unknown]: localhost この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: JA CN=localhost, OU=localhost, O=localhost, L=localhost, ST=localhost, C=JA でよろ しいですか? [no]: yesの鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は RETURN を押してください): hogehoge >keytool -selfcert -alias tomcat キーストアのパスワードを入力してください: hogehoge >keytool -list キーストアのパスワードを入力してください: hogehoge キーストアのタイプ: jks キーストアのプロバイダ: SUN キーストアには 1 エントリが含まれます。 tomcat, 2005/03/19, keyEntry, 証明書のフィンガープリント (MD5): 49:F7:85:DD:25:FA:03:C4:13:94:2C:67:2E:95:23:D 4 >
3.TomcatにSSLコネクタをセットアップする
1. 先ほどできた .keystore ファイルを適当な場所にコピーする。今回は簡単のためにTomcatとインストールディレクトリに置く。
2. Tomcat の conf/server.xmlのうち、SSLコネクタのコメントをはずす
↓この部分だ。
<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> <!-- <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8443" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="100" debug="0" scheme="https" secure="true" useURIValidationHack="false" disableUploadTimeout="true"> <Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" clientAuth="false" protocol="TLS" /> </Connector> -->
3. Tomcat管理画面から行う場合は、
- Tomcat Server > Service をクリックして「新しいコネクタを作成」を選択する
- 画像の赤く囲んだところを入力する。ポートは8443にしてあるが、SSLのデフォルトポート443でもよい
- 設定を保存し、変更を反映する。
- conf/server.xml を開き、
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" acceptCount="100" allowTrace="false" bufferSize="2048" compression="off" connectionLinger="-1" connectionTimeout="20000" connectionUploadTimeout="300000" debug="0" disableUploadTimeout="true" enableLookups="true" maxKeepAliveRequests="100" maxProcessors="75" maxSpareProcessors="5" minProcessors="5" port="8888" protocolHandlerClassName="org.apache.coyote.http11.Http11Protocol" proxyPort="0" redirectPort="8443" scheme="http" secure="false" serverSocketTimeout="0" tcpNoDelay="true" tomcatAuthentication="true" useBodyEncodingForURI="true" useURIValidationHack="false"> <Factory className="org.apache.catalina.net.DefaultServerSocketFactory"/> </Connector> <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" acceptCount="10" allowTrace="false" bufferSize="2048" compression="off" connectionLinger="-1" connectionTimeout="20000" connectionUploadTimeout="300000" debug="0" disableUploadTimeout="false" enableLookups="true" maxKeepAliveRequests="100" maxProcessors="75" maxSpareProcessors="5" minProcessors="5" port="8009" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" proxyPort="0" redirectPort="8443" scheme="http" secure="false" serverSocketTimeout="0" tcpNoDelay="true" tomcatAuthentication="true" useBodyEncodingForURI="true" useURIValidationHack="false"> <Factory className="org.apache.catalina.net.DefaultServerSocketFactory"/> </Connector> <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" acceptCount="10" allowTrace="false" bufferSize="2048" compression="off" connectionLinger="-1" connectionTimeout="60000" connectionUploadTimeout="300000" debug="0" disableUploadTimeout="false" enableLookups="true" maxKeepAliveRequests="100" maxProcessors="20" maxSpareProcessors="5" minProcessors="5" port="8443" protocolHandlerClassName="org.apache.coyote.http11.Http11Protocol" proxyPort="0" redirectPort="-1" scheme="https" secure="true" serverSocketTimeout="0" tcpNoDelay="true" tomcatAuthentication="true" useBodyEncodingForURI="false" useURIValidationHack="false"> <Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" clientAuth="false" keystoreFile="C:\Applications\Apache Group\Tomcat 4.1\bin\..\.keystore" keystorePass="hogehoge" keystoreType="JKS" protocol="TLS" randomFile="C:\xxxxx\random.pem" rootFile="C:\xxxxx\root.pem"/> </Connector>
4. Tomcatを再起動する