3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(Linux)Tomcat6でSSL通信をしたい

CentOS5上にインストールした Tomcat6 でSSL通信を行うための方法です。

(Linux上へのTomcat6のインストール方法はCentOS5.3 に Tomcat6 を入れてみたで書いています。Tomcat起動停止スクリプトもここで作成したものを使うこととします。)

まず SSL 通信に用いる為の鍵をJDK付属の keytool を使って作成します。(LinuxでのJDKのインストール方法は(Linux)Java Web Start補足1[Sun製Javaのインストール。]で書いています。)

# cd /usr/java/jdk1.6.0_21/bin

# ./keytool -genkey -alias tomcat -keyalg RSA

キーストアのパスワードを入力してください: ←キーストアのパスワードを任意で入力

新規パスワードを再入力してください:

姓名を入力してください。

[Unknown]: sv1.exsample.com ←TomcatサーバのFQDN名を入力します。これがリクエストと一致しないと不正なホストと判断されるようです。

組織単位名を入力してください。

[Unknown]: test

組織名を入力してください。

[Unknown]: test

都市名または地域名を入力してください。

[Unknown]: shinagawa

州名または地方名を入力してください。

[Unknown]: tokyo

この単位に該当する 2 文字の国番号を入力してください。

[Unknown]: jp

CN=sv1.exsample.com, OU=test, O=test, L=shinagawa, ST=tokyo, C=jp でよろしいですか?

[no]: yes

の鍵パスワードを入力してください。

(キーストアのパスワードと同じ場合は RETURN を押してください): ←そのままEnter

ここで作成したキーはユーザのディレクトリに生成されます。

今回 root ユーザだったので、 /root/.keystore がキーファイルとなります。

次に、Tomcat側の設定を server.xml で行います。

Connector port="8443" ... がコメントアウトになっていると思うので、そのコメントアウトを削除し、keystorePass , keystoreFile の項目を付け足します。。

(keystorePass,keystoreFileを指定しないとポート8443がLISTENしてくれませんでした。)

# vi /opt/tomcat6/conf/server.xml

maxThreads="150" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS"

keystorePass="キーストアのパスワード" ←追加 上記keytoolでの鍵作成時に入れたキーストアのパスワード

keystoreFile="/root/.keystore" ←追加 キーのファイルを指定

/>

# /etc/rc.d/init.d/tomcat restart ←Tomcat再起動

これで、netstat で8443が LISTEN されているか確認します。

ブラウザで、https://sv1.exsample.com:8443/ でアクセスできればOKです。

ただし、オレオレ証明書なのでクライアントブラウザでアクセスすると警告が表示されます。

さてクライアントを限定してオレオレ証明書の警告が出ないようにするには下記のように自己署名証明書を作成します。

# cd /usr/java/jdk1.6.0_21/bin

# ./keytool -selfcert -alias tomcat -validity 180 ←証明書の有効期間を180日に。alias tomcatが新しく置き換えられます

# /etc/rc.d/init.d/tomcat restart ←新しい証明書をTomcatがロードするためTomcat再起動

# ./keytool -export -alias tomcat -file rootcert.cer ←クライアント用ルート証明書をエクスポート

後は上記で生成された rootcert.cer をFTPなり、HTTPなりUSBメモリなりメールなりでクライアントに送付し、インストールします。

(rootcert.cerをダブルクリックでインストールすると、IEでは警告が出なくなります。Firefixだとオプション→詳細→暗号化タブ→証明書を表示 から 証明書マネージャ を立ち上げ、サーバ証明書に rootcert.cer をインストールし、設定で この証明書が本物であると信用する を選びます。)

ただ、クライアント毎にしないといけないので、結局オレオレ証明書は面倒ですね。

証明書の有効期間が切れたら上記の自己証明書作成から、クライアントへのルート証明書インストールをすればOKです。しかし面倒です。

余談ですが、キーストア内の証明書を削除するには下記のようすればOKです。

# cd /usr/java/jdk1.6.0_21/bin

# ./keytool -delete -alias tomcat -keystore /root/.keystore -storepass password

参考:

ITmedia エンタープライズ:Java Tips:TomcatでSSLを使うには?

■【Tomcat】でSSL接続しよう! - Windows Live

TOMCAT6のSSL設定 - Java Solution - @IT

Tomcat5 サーブレット/JSP コンテナ - SSL設定の手引き

Java/keytool - 備忘録