Eclipse + Tomcat でSSLを設定する【keytoolで自己証明書を作成】

Eclipseのアイキャッチ

本番環境ではないローカルの開発環境でも、httpsでアクセスしないと動作確認できない場面がありますよね。CookieのSecure属性が絡む処理や外部API連携のコールバックURLなどが典型例です。

今回はPleiades All in One(Eclipse + Tomcat)の構成でSSLを設定した手順をまとめます。JDKに同梱されているkeytoolコマンドで自己証明書(いわゆるオレオレ証明書)を作成し、Tomcatのserver.xmlに設定するだけなので、それほど難しくはありません。

目次

この記事でわかること

  • keytoolを使った自己証明書(JKSファイル)の作成手順
  • TomcatのSSL設定(server.xmlの書き方)
  • ブラウザで警告が出たときの対処と証明書の確認方法

keytool で自己証明書を作成する

JDKまたはJREのbinディレクトリにkeytoolが含まれています。WindowsでもmacOS/Linuxでも基本的に同じコマンドで作成できます。

keytool のある場所を確認する

Step
keytool のある場所を確認する

Pleiades All in One を使っている場合、JDKはpleiades/java/以下に含まれています。コマンドプロンプト(またはターミナル)でそのbinディレクトリに移動します。

cd C:\pleiades\java\21\bin

Pleiades以外のJDKを使っている場合はインストールディレクトリ内のbinに同様にkeytoolがあります。

Step
keytool コマンドを実行する

-keystoreに出力するファイル名を指定します。ここではdev_ssl.jksという名前で作成します。

コマンド
.\keytool -genkeypair -keystore dev_ssl.jks -keyalg RSA

macOS/Linuxの場合は.\ではなく./です。

Step
パスワードを設定する

キーストアに設定するパスワードを入力します。6文字以上である必要があります。このパスワードは後ほどserver.xmlに設定するので控えておきます。

コマンド
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
Step
証明書の属性情報を入力する

姓名・組織名・国コードなどを順番に聞かれます。開発環境用なので適当な値で問題ありません。空白のままEnterでもOKです。

コマンド
姓名は何ですか。
  [Unknown]:  test1
組織単位名は何ですか。
  [Unknown]:  test2
組織名は何ですか。
  [Unknown]:  test3
都市名または地域名は何ですか。
  [Unknown]:  test4
都道府県名または州名は何ですか。
  [Unknown]:  test5
この単位に該当する2文字の国コードは何ですか。
  [Unknown]:  jp
Step
確認

最後に確認が出るのでYを入力して次に進みます。

コマンド
CN=test1, OU=test2, O=test3, L=test4, ST=test5, C=jpでよろしいですか。
  [いいえ]:  Y
Step
鍵パスワードの入力

<mykey>の鍵パスワードを求められます。キーストアと同じパスワードでよければそのままEnterを押します。

コマンド
<mykey>の鍵パスワードを入力してください
        (キーストアのパスワードと同じ場合はRETURNを押してください):
Step
作成完了

コマンドを実行したbinディレクトリにdev_ssl.jksが生成されています。このファイルはWebの公開エリア外に移動しておきます。

作成時に以下のような警告が表示されますが、開発用なので無視して問題ありません。

Warning:
JKSキーストアは独自の形式を使用しています。”keytool -importkeystore -srckeystore dev_ssl.jks -destkeystore dev_ssl.jks -deststoretype pkcs12″を使用する業界標準の形式であるPKCS12に移行することをお薦めします。

この警告はJKS形式がPKCS12形式より古い独自仕様であることを示しています。本番環境であれば移行を検討すべきですが、開発用の自己証明書としてはJKSのままで動作します。

Tomcatに証明書を設定する(server.xml の編集)

server.xmlに SSLのコネクター設定を追記します。

Eclipse環境であればプロジェクト・エクスプローラー → Servers → server.xmlをダブルクリックで開くのが手っ取り早いです。

既存の8080ポートのConnectorタグの直後に以下を追加します。

server.xml
<!-- デフォルトで存在する8080ポートの設定 -->
<Connector connectionTimeout="20000" maxParameterCount="1000"
           port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

<!-- 追加するSSLの設定 -->
<Connector
    port="8443"
    protocol="HTTP/1.1"
    SSLEnabled="true"
    scheme="https"
    keystoreFile="【証明書のファイルパス】"
    keystorePass="【証明書のパスワード】" />
  • port
    SSLでアクセスするポート番号です。443はOS側でroot/管理者権限が必要になる場合があるため、開発環境では8443を使うのが無難です。
  • keystoreFile
    Step7で移動したdev_ssl.jksのファイルパスを絶対パスまたはTomcatからの相対パスで指定します。
  • keystorePass
    Step3で設定したキーストアのパスワードを指定します。

設定後、EclipseからTomcatを再起動します。

ブラウザでアクセスして確認する

https://localhost:8443/【アプリのコンテキストパス】でアクセスするとブラウザに警告画面が表示されます。自己証明書のためブラウザが信頼できる証明書と判断できないためです。

「詳細設定」をクリックし、「(ホスト名)にアクセスする」リンクからページへ進みます。

httpsアクセスで警告画面
隠れているアクセスするリンクから表示

⚠️ この操作は自分で作成した証明書とわかっている開発環境でのみ行ってください。見知らぬサイトでこの警告が出た場合は同様の操作はお勧めしません。

アドレスバーの鍵アイコンから証明書の詳細も確認できます。keytoolで設定した姓名・組織名などが反映されていればOKです。

ブラウザで証明書の内容をみてみる

作成した証明書の内容をブラウザで見てみます。アドレスバーの部分から確認できます。

証明書の詳細

証明書に設定した内容が見れますね。

証明書の内容

Q&A

「接続がプライベートではありません」警告を毎回スキップするのが面倒

ブラウザに自己証明書をインポートして信頼済みにする方法があります。Chromeの場合は「設定 → プライバシーとセキュリティ → 証明書の管理」から追加できます。開発専用マシンであれば検討してみてください。

Tomcat 10以降でも同じ設定?

Tomcat 10.x(Jakarta EE 9+対応)でもConnectorタグの属性ベースのSSL設定は引き続き使えます。ただし、Tomcatの公式ドキュメントではSSLHostConfig要素を使ったより詳細な設定方法が案内されています。複数証明書を管理する場合などはそちらも参照してみてください。

keytoolが見つからないと言われる

JDKのbinディレクトリにパスが通っていない可能性があります。java -versionが通るか確認し、同じディレクトリのkeytoolを実行してみてください。Pleiades All in One に含まれるJDKのパスはpleiades/java/【バージョン】/binです。

まとめ

  • keytoolはJDK/JREのbinディレクトリに含まれているよ。
  • -genkeypair -keyalg RSAで自己証明書(JKSファイル)を作成できるよ。
  • server.xmlのConnectorにSSL設定を追加するだけでhttpsが有効になるよ。
  • 開発環境ではポート443より8443を使うほうがトラブルが少ないよ。
  • ブラウザの警告は自己証明書に対する正常な動作だよ。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次