0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tomcatでのhttpとhttps同居で、一方のサイトはhttpsを強制する検証

Last updated at Posted at 2025-11-13

またまだ、レガシーシステムが稼働している環境はたくさんあるかと思います。
そんなシステムのバージョンアッププロジェクトへアサインされたときに使えそうな検証をしてみました。

JDK、Tomcatを最新ではない少々古いバージョンを使った検証となりますので、
実際に試される際には、お使いの環境に合わせて適宜最新バージョンを利用してください。

検証環境概要

項目 内容
OS AlmaLinux 8 系 (VirtualBox 上に仮想マシン)
ユーザー maint
Web サーバ Apache Tomcat 8.5.83
Java 環境 OpenJDK 8 (java-1.8.0-openjdk-devel)
アクセス方式 Aシステム:HTTP 8080、Bシステム:HTTPS 8443
Firewall firewalldはdisable
プライベート認証局 OpenSSL で簡易 CA を作成、Bシステム用サーバ証明書発行
ブラウザ確認 ローカルまたは VM 内ブラウザからアクセス可能

※VirtualBoxを使って検証します


検証目的

  1. Tomcat 上に複数システム(A/B)をデプロイし、アクセス方式を分離する

    • Aシステム:HTTP のみ
    • Bシステム:HTTPS 専用
  2. HTTPS のリダイレクト制御

    • Bシステムへの HTTP アクセスを HTTPS に自動リダイレクト
  3. プライベート認証局の模擬

    • 自己署名 CA を作成してサーバ証明書を発行
    • HTTPS 検証用の安全な通信を構築
  4. Tomcat のサービス管理

    • systemd で起動設定

検証の流れ(予定)

  1. OpenJDK 8 インストール → JAVA_HOME 設定
  2. Tomcat インストール → systemd サービス登録
  3. プライベート CA 作成 → Bシステム用証明書発行
  4. Tomcat で A/B システムデプロイ
  5. web.xml で Bシステム HTTPS 強制設定

ポイント

  • この環境はあくまで 開発・テスト用
  • 本番運用では 正式な CA 証明書 と セキュリティ強化設定 が必要

前提

・OpenJDK_インストール手順書でOpenJDKを事前にインストールしていること。

[maint@mdmslutsv ~]$ java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)

★実行時に権限エラーが発生する場合には、sudoを付けて実行してください。

Tomcat設定

apache-tomcat-8.5.83.tar.gzのダウンロード

https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.83/bin/

	apache-tomcat-8.5.83.tar.gz  をダウンロードする

VMにapache-tomcat-8.5.83.tar.gz を持ち込む

※ツール機能を使って、ホストOSからVMのゲストOSへ
 apache-tomcat-8.5.83.tar.gz  をコピーする

※コピー先は作業ユーザのhomeにアップロードなどする

既にtomcatユーザが存在するか確認する

	[maint@mdmslutsv opt]$ id tomcat
	uid=53(tomcat) gid=53(tomcat) groups=53(tomcat)

※確認した結果で、既にtomcatユーザが存在する場合には以下のコマンドは実行不要
	useradd -s /sbin/nologin tomcat

インストール

1. apache-tomcat-8.5.83.tar.gzを解凍する。

maintユーザで作業を行う

mkdir -p work/tomcat
cd /work/tomcat/
tar xvzf ./apache-tomcat-8.5.83.tar.gz
mv apache-tomcat-8.5.83 /opt

2./opt/apache-tomcat-8.5.83の所有者をtomcatユーザーに変更する。

cd /opt
chown -R tomcat:tomcat /opt/apache-tomcat-8.5.83
ln -s /opt/apache-tomcat-8.5.83 /opt/tomcat

設定

1.Tomcatのサービス起動ファイルを作成する。

vi /etc/systemd/system/tomcat.service

<tomcat.serviceの内容>
--ここの1行下から入力する。
[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/var/run/tomcat.pid
RemainAfterExit=yes

EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
ExecReStart=/opt/tomcat/bin/shutdown.sh;/opt/tomcat/bin/startup.sh
[Install]
WantedBy=multi-user.target
--ここの1行上までを入力する。

2.Tomcatのsysconfigに設定をする。

vi /etc/sysconfig/tomcat

※以下のJAVA_HOMEの設定値は検証環境に合わせて変更する

JAVA_HOME=/opt/java
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"

<検証環境では以下の設定とした>
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"

3.firewalldのサービス定義ファイルを作成する。

vi /etc/firewalld/services/tomcat.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Tomcat (HTTP)</short>
  <description>Tomcat HTTP Server.</description>
  <port protocol="tcp" port="8080"/>
</service>

起動確認

1.サービスを起動する。

sudo systemctl enable tomcat
sudo systemctl start tomcat
sudo systemctl status tomcat

<activeとなっていればOK>
以下は、起動OK例です。
[maint@mdmslutsv tomcat]$ sudo systemctl status tomcat
● tomcat.service - Apache Tomcat 8
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (exited) since Thu 2025-11-13 10:49:44 JST; 9s ago

export CATALINA_HOMEをする

export CATALINA_HOME=/opt/tomcat

HTTPS 用の証明書準備(プライベート認証局の模擬と証明書発行)

1.前提

  • OpenSSLがインストールされていること

    ・証明書は自己署名 CA 方式(テスト用)
    ・Bシステムの Tomcat HTTPS ポートは 8443 とする

2.作業用のディレクトリを作成する

mkdir -p ~/myCA
cd ~/myCA
mkdir certs crl newcerts private
chmod 700 private
touch index.txt
echo 1000 > serial

<各情報の内訳>
	private … CA の秘密鍵保存
	certs … CA 発行証明書保存
	newcerts … 発行済みサーバ証明書
	index.txt, serial … OpenSSL が使用する管理ファイル

3. プライベートCA の作成

3-1. CA 秘密鍵作成

openssl genrsa -out private/ca.key 4096
chmod 400 private/ca.key

3-2. CA 証明書作成(自己署名)

openssl req -x509 -new -nodes -key private/ca.key -sha256 -days 3650 -out certs/ca.crt

・-days 3650 → 10年間有効
| 項目                          | 入力例(テスト用) |
| ---------------------------- | ------------------ |
| Country Name (2 letter code) | `JP`               |
| State or Province Name       | `test`             |
| Locality Name                | `ltest`            |
| Organization Name            | `MyTestCA`         |
| Organizational Unit Name     | `Dev`              |
| Common Name                  | `MyTestCA Root`    |
| Email Address                | `test@example.com` |

4. Bシステム用サーバ証明書作成

4-1. サーバ秘密鍵作成

openssl genrsa -out bserver.key 2048

4-2. 証明書署名要求(CSR)作成

openssl req -new -key bserver.key -out bserver.csr

・Common Name は Bシステムにアクセスするホスト名やIP にする
	例: bserver.local または VM の IP 192.168.56.101
	※検証環境では、192.168.56.10 にしました。

| 項目                           | 入力例(テスト用)                    | 補足                                            |
| ---------------------------- | ---------------------------- | --------------------------------------------- |
| Country Name (2 letter code) | `JP`                         | 2文字の国コード                                      |
| State or Province Name       | `test`                      | 任意の都道府県名                                      |
| Locality Name                | `ltest`                       | 任意の市町村名                                       |
| Organization Name            | `MyCompany`                  | サーバ運用者名(会社名など)                                |
| Organizational Unit Name     | `Dev`                        | 部署名など任意                                       |
| Common Name (CN)             | サーバIP or `bserver.local` または Bシステム IP | サーバのホスト名または IP が重要。ブラウザでアクセスする URL と一致させる |
| Email Address                | `admin@example.com`          | 任意                                            |
| A challenge password         | 未入力(空のままEnter)
| An optional company name     | 未入力(空のままEnter)

4-3. サーバ証明書署名(CA で発行)

openssl x509 -req -in bserver.csr -CA certs/ca.crt -CAkey private/ca.key -CAcreateserial -out bserver.crt -days 365 -sha256

・これで bserver.crt が Bシステム用証明書になる

5. Tomcat 用に PKCS#12 に変換

  • Tomcat の keystore で使える形式に変換:

      openssl pkcs12 -export -in bserver.crt -inkey bserver.key -out bserver.p12 -name tomcat -CAfile certs/ca.crt -caname root
    

    Enter Export Password: ← <任意の値> で設定
    パスワード入力 → 後で Tomcat server.xml に設定


<以下は、必要な場合のみ実行>

  • 作業ユーザのhomeにmycaを作成してしまった場合には、tomcatフォルダにコピーのうえ、権限設定を変えてtomcatが利用可能にすること
  1. コピー先ディレクトリ作成(必要に応じて)

    sudo mkdir -p /opt/tomcat/myCA

  2. maint の myCA をコピー

    sudo cp -r /home/maint/myCA/* /opt/tomcat/myCA/

  3. Tomcat ユーザ用に権限変更

    sudo chown -R tomcat:tomcat /opt/tomcat/myCA
    sudo chmod 700 /opt/tomcat/myCA


6. Tomcat HTTPS 設定例

  • $CATALINA_HOME/conf/server.xml の Connector を編集:
	sudo vi $CATALINA_HOME/conf/server.xml

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
    <Certificate certificateKeystoreFile="/opt/tomcat/myCA/bserver.p12"
    type="PKCS12"
    certificateKeystorePassword="<4-5. Tomcat 用に PKCS#12 に変換で設定したパスワード>" />
    </SSLHostConfig>
    </Connector>

7. Tomcat 再起動

sudo systemctl restart tomcat

4.簡易Webサイト設定(検証用)

1.Webアプリの配置

Aシステム(HTTPのみ)

sudo mkdir -p /opt/tomcat/webapps/ROOT
sudo tee /opt/tomcat/webapps/ROOT/index.html <<'EOF'
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>A System</title></head>
<body>
<h2>This is A System (HTTP only)</h2>
<p>Accessed via: http://<VM_IP>:8080/</p>
</body>
</html>
EOF

・/ROOT は Tomcat のデフォルトWebアプリ
・HTTP 8080 でアクセス可能

Bシステム(HTTPSのみ)

sudo mkdir -p /opt/tomcat/webapps/appB/WEB-INF

# index.html
sudo tee /opt/tomcat/webapps/appB/index.html <<'EOF'
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>B System</title></head>
<body>
<h2>This is B System (HTTPS only)</h2>
<p>Accessed via: https://<VM_IP>:8443/appB/</p>
</body>
</html>
EOF

# web.xml(HTTPS強制)
sudo tee /opt/tomcat/webapps/appB/WEB-INF/web.xml <<'EOF'
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                             https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>BApp</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>

</web-app>
EOF

・transport-guarantee=CONFIDENTIAL により HTTP → HTTPS へのリダイレクトが自動的に行われる

2.Tomcat の HTTPS 設定

1. /opt/tomcat/conf/server.xml の Connector 設定を追加または修正

sudo vi /opt/tomcat/conf/server.xml

以下の内容となっていればOK

<!-- HTTP connector -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

<!-- HTTPS connector -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/opt/tomcat/myCA/bserver.p12"
                     type="RSA"
                     certificateKeystorePassword="<4-5. Tomcat 用に PKCS#12 に変換で設定したパスワード>" />
    </SSLHostConfig>
</Connector>

・certificateFile と certificateKeyFile は先ほど作った B システム用証明書のパス
・redirectPort="8443" により A システムから B システムに HTTP でアクセスすると自動的に HTTPS にリダイレクトされる

3.Tomcat再起動

sudo systemctl restart tomcat

5. 動作確認

VMの簡易Webサイトに対してアクセスをする

http://<VM_IP>:8080/ → Aシステム表示
http://<VM_IP>:8080/appB/ → HTTPS にリダイレクト
https://<VM_IP>:8443/appB/ → Bシステム表示

※検証環境では以下で確認した
http://192.168.56.10:8080/ → Aシステム表示
http://192.168.56.10:8080/appB/ → HTTPS にリダイレクト
https://192.168.56.10:8443/appB/ → Bシステム表示
https://192.168.56.10:8080/ → AシステムへHTTPSで接続は出来ない想定

<ホストOS側でhttps接続でプライバシーエラーが発生する場合>
VMで作成した myCA\ca.crtを 接続するホストOS側へインストールしてください。
・ローカルコンピュータを選択すること。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?