TOMCATにSSLをかける方法(TOMCAT5.X)
思ったよりも難しくない・・・のか?
TOMCATインストールディレクトリ=TOMCAT_HOME
TOMCAT_HOME/conf/server.xmlにまずSSL用の設定
ポート番号として8443が指定されたConnector要素を探しだす。
デフォルトではコメントアウトされている。
<!--
<Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
Connector要素の前後にあるコメント記号を削除して、コネクタを有効に。
次に、8443になっているポート番号をSSLで一般的な443にしておく。
(443以外を使うつもりならそのポートへ変更)
鍵を作る。
これにはJ2SEに含まれているkeytoolツールを使う。次のように入力して起動。(JAVAにパス通しておいてね)
$ keytool -genkey -alias tomcat -keyalg RSA
起動したらコマンドラインで対話形式になっているので、質問に1つずつ答えていく。
鍵の発行者に関する情報を入力していく。
太字の部分が入力箇所。
キーストアのパスワードを入力してください: changeit
姓名を入力してください。
[Unknown]: hoge.com
*姓名と書かれているが、Common Name(CN)として登録される SSL/TLSで使うドメイン名を入力する。
組織単位名を入力してください。
[Unknown]: JAVA Developer
*Organization Unit (OU) 組織単位名。なんでもよい。部署名とか。複数サーバで同じサーバ名を使う場合は、それぞれ別の名前にする。
組織名を入力してください。
[Unknown]: hogehoge
*Organization Name (O) として登録される。
CAに認証してもらうときはドメインのwhoisに登録されている所有者の組織名と同じにする。
個人の場合は個人名にする。
都市名または地域名を入力してください。
[Unknown]: hogeku
*市区町村
州名または地方名を入力してください。
[Unknown]: Tokyo
*ST 州、都道府県
この単位に該当する 2 文字の国番号を入力してください。
[Unknown]: JP
*C 国番号
CN=hoge.com, OU=JAVA Developer, O=, L=hogehoge, ST=Tokyo, C=JP でよろしいですか?
[no]: yes
<tomcat> の鍵パスワードを入力してください。
(キーストアのパスワードと同じ場合は RETURN を押してください): changeit
$
この中で、「changeit」というのはデフォルトの鍵とキーストアのパスワード。
デフォルトで「changeit」になっている。
パスワードを変えた場合は、先の設定ファイルのSSLのConnector要素の子要素にパスワード指定を追記する。
これでユーザーのディレクトリにキーができる。
キーストアの作成先は、Windowsなら"%USERPROFILE%"\.keystore。
UNIXならホームディレクトリ下~/.keystoreとなる。この中に鍵が追加されているはず。
キーストアを保存したディレクトリを移動した場合もSSLのConnector要素の子要素にパスの指定を追記する必要がある。
<Connector port="443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/path/.keystore" <!-- キーストアの場所 -->
keystorePass="hogehoge" <!-- パスワード -->
/>
Tomcatを再起動。
https//サーバーアドレス/ でGO
また、特定のページに対して、httpsを強制する方法は
各WEB-INF内「web.xml」に「security-constraint」を設定する。
<security-constraint>
<web-resource-collection>
<url-pattern>/SSLにしたい場所/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL<transport-guarantee>
</user-data-constraint>
</security-constraint>
※「transport-guarantee」では、SSLを使用したい場合には、「CONFIDENTIAL」を指定する。
HTTPでアクセスすると、自動的にHTTPSでアクセスされるようにリダイレクトされる。
https//サーバーアドレス/指定ページ でGO
PR