- 記事一覧 >
- ブログ記事
EJBCA(PKIおよび証明書管理アプリ)をビルドしてインストールしてみた
はじめに
EJBCA(EJBCA Community)というオープンソースの公開鍵基盤(PKI)および認証局(CA)ソフトウェアをビルドしてインストールしました。
本記事では、その手順を紹介していきたいと思います。
公式 Docker コンテナ がありますので、Docker(Docker Compose)を使った方が良いと思いますが、あえてのビルドです。
公式ビルド手順は、https://doc.primekey.com/ejbca/ejbca-installation
にあり、今回の記事では、アプリケーションサーバー、DB など、いろいろな選択肢の中の一つです。動けばヨシで、細かい設定、チューニングは極力無しです。
この記事では、インストールして Web 管理画面(/ejbca/adminweb/
)が表示されたら終わりです。
Java ラー以外の方でも進められるようになるべく意味を紐解きながら進めます。
Docker のやり方は、こちらにあります。EJBCA を動かすだけなら、「Docker って何?」から始まらない限り絶対こっちの方が良いと思います。
https://doc.primekey.com/ejbca/tutorials-and-guides/tutorial-start-out-with-ejbca-docker-container
以下の環境です。少しでも環境が異なると、途中で詰まるかもしれません。
Ubuntu Desktop 22.04.3 LTS
EJBCA 8.2.0.1 Community
openjdk version "11.0.21" 2023-10-17
wildfly 26.0.0.Final
mysql Ver 15.1 Distrib 10.6.16-MariaDB
Apache Ant(TM) version 1.10.12
【 EJBCA 】
EJBCA は、エンタープライズ向けの公開鍵基盤(PKI)認証局のツールです。証明書の発行、失効、鍵管理などを行うことができます。
【 PKI 】
PKI(Public Key Infrastructure、公開鍵基盤)は、公開鍵暗号やデジタル署名をインターネット上で安全に運用するための社会的基盤です。
これにより、公開鍵の配布、認証、鍵の管理などが行われます。具体的には、信頼できる第三者(認証局)がデジタル証明書を発行し、その証明書を通じて公開鍵が安全に配布されます。
これにより、通信の安全性が保証されます。
【 CA 】
CA(Certificate Authority)は、インターネット上で接続者の身分を証明する電子証明書の発行と管理を行う認証局のことです。
本記事情報の設定不足、誤りにより何らかの問題が生じても、一切責任を負いません。
ホスト名設定
root 権限で作業します。
とりあえず、ホスト名を ejbcatest
と最初に決めておきます。(この作業は、省略しても良いです。)
$ su
# hostnamectl set-hostname ejbcatest
# vi /etc/hosts
127.0.0.1 ejbcatest
192.168.11.6 ejbcatest
MariaDB インストール
MariaDB をインストールします。PostgreSQL など、その他の選択肢もありますが、今回は、MariaDB です。
【 MariaDB 】
MariaDB は、MySQL から派生したオープンソースのリレーショナルデータベース管理システム(RDBMS)です。MySQL と高い互換性を持ちつつ、新機能の追加やソースコードの改善が行われています。
# apt update
# apt -y upgrade
# apt install mariadb-server -y
# mysql_secure_installation
Enter current password for root (enter for none): エンター
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] エンター
Disallow root login remotely? [Y/n] エンター
Remove test database and access to it? [Y/n] エンター
Reload privilege tables now? [Y/n] エンター
# mysql --version
mysql Ver 15.1 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
ejbca ユーザー作成
公式ドキュメント(https://doc.primekey.com/ejbca/ejbca-installation/creating-the-database
)に以下の記述があるため、それに従います。"MySQL バージョン 8 以降、GRANT コマンドを使用してユーザーを暗黙的に作成することはできません。"
"MySQL バージョン 8 以降を実行している場合は、 次の例に従って最初にejbcaユーザーを作成します。"
# mysql -u root -p
Enter password: エンター(空のパスワード)
MariaDB [(none)]> CREATE USER 'ejbca'@'localhost' IDENTIFIED BY 'ejbca';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ejbca.* TO 'ejbca'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;
1. mysql -u root -p
-p
オプションはパスワードを求めるためのものです。2. CREATE USER 'ejbca'@'localhost' IDENTIFIED BY 'ejbca';
ejbca
という名前の新しいユーザーを作成します。このユーザーは localhost
からの接続のみを許可し、パスワードは ejbca
に設定されます。3. GRANT ALL PRIVILEGES ON ejbca.* TO 'ejbca'@'localhost';
ejbca
ユーザーに、ejbca
データベースの全てのテーブルに対する全権限を付与します。4.FLUSH PRIVILEGES;
# mysql -u root -p
Enter password:エンター
MariaDB [(none)]> CREATE DATABASE ejbca CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ejbca.* TO 'ejbca'@'localhost' IDENTIFIED BY 'ejbca';
MariaDB [(none)]> exit;
1. CREATE DATABASE ejbca CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ejbca
という名前の新しいデータベースを作成します。文字セットと照合順序はそれぞれ utf8mb4
と utf8mb4_unicode_ci
に設定されます。2. GRANT ALL PRIVILEGES ON ejbca.* TO 'ejbca'@'localhost' IDENTIFIED BY 'ejbca';
ejbca
ユーザーに、新しく作成した ejbca
データベースの全てのテーブルに対する全権限を付与します。このユーザーは localhost
からの接続のみを許可し、パスワードは ejbca
に設定されます。wildfly26 インストール
wildfly26 をインストールします。
公式ドキュメントは、こちらです。https://doc.primekey.com/ejbca/ejbca-installation/application-servers/wildfly-26
ZIP パッケージを使用してインストールします。
インストール先は、/opt/wildfly です。
# wget https://github.com/wildfly/wildfly/releases/download/26.0.0.Final/wildfly-26.0.0.Final.zip -O /home/admin/wildfly-26.0.0.Final.zip
# unzip -q /home/admin/wildfly-26.0.0.Final.zip -d /opt/
# ln -snf /opt/wildfly-26.0.0.Final /opt/wildfly
【 WildFly 】
WildFly は、Java EE 準拠のオープンソースアプリケーションサーバで、高速、軽量、高機能、柔軟な特性を持っています。元々は「JBoss Application Server」という名前でしたが、現在は「WildFly」に改名されています。
RESTEasy-Crypto を削除します。
# sed -i '/.*org.jboss.resteasy.resteasy-crypto.*/d' /opt/wildfly/modules/system/layers/base/org/jboss/as/jaxrs/main/module.xml
# rm -rf /opt/wildfly/modules/system/layers/base/org/jboss/resteasy/resteasy-crypto/
【 RESTEasy 】
RESTEasy は、JBoss Enterprise Application Platform(EAP)の一部です。JBoss が提供するフレームワークで、Java で RESTful Web サービスを簡単に作成できるようにするものです。
カスタム構成の作成を行います。
# cp -p /opt/wildfly/bin/standalone.conf /opt/wildfly/bin/standalone.conf.org
# sed -i -e 's/{{ HEAP_SIZE }}/2048/g' /opt/wildfly/bin/standalone.conf
# sed -i -e "s/{{ TX_NODE_ID }}/$(od -A n -t d -N 1 /dev/urandom | tr -d ' ')/g" /opt/wildfly/bin/standalone.conf
1. sed -i -e 's/{{ HEAP_SIZE }}/2048/g' /opt/wildfly/bin/standalone.conf
{{ HEAP_SIZE }}
という文字列を 2048 に置換します。これは、Java のヒープサイズを設定するためのもので、通常は Java アプリケーションのパフォーマンスを調整するために使用されます。2. sed -i -e "s/{{ TX_NODE_ID }}/$(od -A n -t d -N 1 /dev/urandom | tr -d ' ')/g" /opt/wildfly/bin/standalone.conf
{{ TX_NODE_ID }}
という文字列をランダムな数値に置換します。この数値は /dev/urandom デバイスから生成され、トランザクションノード ID を一意に識別するために使用されます。WildFly をサービスとして構成します。
# cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin
# cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system
# mkdir /etc/wildfly
# cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly
# systemctl daemon-reload
# useradd -r -s /bin/false wildfly
# chown -R wildfly:wildfly /opt/wildfly-26.0.0.Final/
WildFly を開始します。
# systemctl start wildfly
Elytron 認証情報ストアを作成します。
# echo '#!/bin/sh' > /usr/bin/wildfly_pass
# echo "echo '$(openssl rand -base64 24)'" >> /usr/bin/wildfly_pass
# chown wildfly:wildfly /usr/bin/wildfly_pass
# chmod 700 /usr/bin/wildfly_pass
【 Elytron 認証情報ストア 】
Elytron 認証情報ストアは、JBoss EAP の Elytron サブシステムで導入されたセキュアなストレージ機能で、認証情報を安全に保存できます。
これは、設定ファイル外で機密文字列を暗号化し、キーストアに格納することができます。また、JBoss EAP 管理 CLI 内での認証情報の管理が容易になります。
openjdk11 インストール
OpenJDK 11 をインストールします。
11 なのは、公式ドキュメントに "Supported and recommended."
と書いてあるからです。
この後の手順に出てくる /opt/wildfly/bin/jboss-cli.sh
の実行に必要です。
# apt update;apt install -y openjdk-11-jdk
# which java
/usr/bin/java
# java -version
openjdk version "11.0.21" 2023-10-17
OpenJDK Runtime Environment (build 11.0.21+9-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.21+9-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
【 jboss-cli.sh 】
jboss-cli.sh は、JBoss EAP(Enterprise Application Platform)のコマンドライン管理ツールです。このツールを使用すると、サーバーの起動や停止、アプリケーションのデプロイ(展開)やアンデプロイ(取り外し)、システムの設定など、さまざまな管理タスクを行うことができます。
【 余談:なぜ wildfly-cli.sh ではないのか 】
WildFly は、元々 JBoss Application Server という名前で開発されていました。そのため、多くのツールや設定ファイルは、まだ「JBoss」の名前を使用しています。jboss-cli.sh もその一つで、WildFly の管理を行うためのコマンドラインツールです。したがって、wildfly-cli.sh ではなく jboss-cli.sh という名前が使われています。
認証情報ストア作成
WildFly の Elytron サブシステムで認証情報ストアを作成します。
# mkdir /opt/wildfly/standalone/configuration/keystore
# chown wildfly:wildfly /opt/wildfly/standalone/configuration/keystore
ここで、なぜか wildfly が止まっていたため、再起動が必要でした。
# systemctl status wildfly
○ wildfly.service - The WildFly Application Server
Loaded: loaded (/etc/systemd/system/wildfly.service; disabled; vendor preset: enabled)
Active: inactive (dead)
# systemctl start wildfly
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add(path=keystore/credentials, relative-to=jboss.server.config.dir, credential-reference={clear-text="{EXT}/usr/bin/wildfly_pass", type="COMMAND"}, create=true)'
{"outcome" => "success"}
1. jboss-cli.sh --connect
2. /subsystem=elytron/credential-store=defaultCS:add(...)
defaultCS
という名前の認証情報ストアを作成します。3. path=keystore/credentials, relative-to=jboss.server.config.dir
keystore/credentials
というパスになります。4. credential-reference={clear-text="{EXT}/usr/bin/wildfly_pass", type="COMMAND"}
/usr/bin/wildfly_pass
というコマンドの出力から取得されます。5. create=true
データベースドライバーの追加
データベースに接続するための JDBC ドライバを WildFly サーバーに配置します。
mariadb-java-client.jar 以外は、念のため、入れておきます。
/opt/wildfly/standalone/deployments/mariadb-java-client.jar
/opt/wildfly/standalone/deployments/postgresql-jdbc4.jar
/opt/wildfly/standalone/deployments/mssql-jdbc.jre11.jar
をインストールします。
# wget https://dlm.mariadb.com/1157496/Connectors/java/connector-java-2.7.0/mariadb-java-client-2.7.0.jar -O /opt/wildfly/standalone/deployments/mariadb-java-client.jar
# wget https://jdbc.postgresql.org/download/postgresql-42.2.18.jar -O /opt/wildfly/standalone/deployments/postgresql-jdbc4.jar
# wget https://github.com/microsoft/mssql-jdbc/releases/download/v12.2.0/mssql-jdbc-12.2.0.jre11.jar -O /opt/wildfly/standalone/deployments/mssql-jdbc.jre11.jar
【 JDBC 】
JDBC(Java Database Connectivity)は、Java プログラムからデータベースへのアクセスを行うための API(Application Programming Interface)です。これにより、Java プログラムはデータベースへの接続、データの読み書きなどの操作を行うことができます。JDBC はデータベースの種類に関わらず同じ手順で接続し、データを操作することが可能です。
データソースの追加
データソースを追加します。
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=dbPassword, secret-value="ejbca")'
# /opt/wildfly/bin/jboss-cli.sh --connect 'data-source add --name=ejbcads --connection-url="jdbc:mysql://127.0.0.1:3306/ejbca" --jndi-name="java:/EjbcaDS" --use-ccm=true --driver-name="mariadb-java-client.jar" --driver-class="org.mariadb.jdbc.Driver" --user-name="ejbca" --credential-reference={store=defaultCS, alias=dbPassword} --validate-on-match=true --background-validation=false --prepared-statements-cache-size=50 --share-prepared-statements=true --min-pool-size=5 --max-pool-size=150 --pool-prefill=true --transaction-isolation=TRANSACTION_READ_COMMITTED --check-valid-connection-sql="select 1;"'
# /opt/wildfly/bin/jboss-cli.sh --connect ':reload'
1. /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=dbPassword, secret-value="ejbca")'
defaultCS
という名前の認証情報ストアに、dbPassword
というエイリアスを追加します。このエイリアスの秘密値は ejbca
に設定されます。なお、エイリアスとは、パスワードが入った入れ物の名前のようなものです。2. /opt/wildfly/bin/jboss-cli.sh --connect 'data-source add (...略...)
ejbcads
を作成します。このデータソースは、MariaDB の ejbca データベースに接続するためのもので、JNDI 名は java:/EjbcaDS
に設定されます。また、CCM(Cached Connection Manager)を使用し、ドライバ名は mariadb-java-client.jar
、ドライバクラスは org.mariadb.jdbc.Driver
に設定されます。ユーザ名はejbcaで、パスワードは先ほど作成した認証情報ストアのエイリアス dbPassword
を参照します。その他、様々なデータソースの設定が行われています。3. /opt/wildfly/bin/jboss-cli.sh --connect ':reload'
WildFly リモート処理の構成
WildFly リモート処理の構成を行います。
全体としてこの操作は、新たな接続ポイントを作成し、その接続ポイントが特定の IP アドレスとポートで HTTP リクエストを待ち受けるように設定する、ということを行っています。
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=connector-ref,value=remoting)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=remoting:add(port=4447,interface=management)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/http-listener=remoting:add(socket-binding=remoting,enable-http2=true)'
# /opt/wildfly/bin/jboss-cli.sh --connect ':reload'
1. /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=remoting/(...略...)
http-remoting-connector
という名前のHTTPコネクタの connector-ref
属性を remoting
に設定します。これにより、HTTP コネクタが remoting コネクタを参照するようになります。2. /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/(...略...)
standard-sockets
という名前のソケットバインディンググループに、remoting
という名前の新しいソケットバインディングを追加します。このソケットバインディングは、management インターフェース上の 4447 ポートを使用します。3. /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/(...略...)
default-server
という名前のサーバーに、remoting
という名前の新しい HTTP リスナーを追加します。この HTTP リスナーは、先ほど作成した remoting ソケットバインディングを使用し、HTTP/2 を有効にします。ロギングの構成
公式ドキュメントに載っているログ関係の操作です。(説明は省略します。)
オプション 1 - 推奨されるログ記録
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.ejbca:add(level=INFO)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore:add(level=INFO)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=com.keyfactor:add(level=INFO)'
追加のロギング構成
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.jboss.as.config:write-attribute(name=level, value=WARN)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.jboss:add(level=WARN)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.wildfly:add(level=WARN)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.xnio:add(level=WARN)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.hibernate:add(level=WARN)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.apache.cxf:add(level=WARN)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.config.ConfigurationHolder:add(level=WARN)'
アクセスログの追加
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add(pattern="%h %t \"%r\" %s \"%{i,User-Agent}\"", relative-to=jboss.server.log.dir, directory=access-logs)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=io.undertow.accesslog:add(level=INFO)'
コンソールハンドラーを削除する
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/root-logger=ROOT:remove-handler(name=CONSOLE)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/console-handler=CONSOLE:remove()'
古いログファイルを削除する
# vi /etc/cron.daily/remove-old-wildfly-logs.sh
----- ここから
#!/bin/sh
# Remove log files older than 7 days
find /opt/wildfly/standalone/log/ -type f -mtime +7 -name 'server.log*' -execdir rm -- '{}' \;
----- ここまで
# chmod +x /etc/cron.daily/remove-old-wildfly-logs.sh
Syslog 送信を有効にする
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/json-formatter=logstash:add(exception-output-type=formatted, key-overrides=[timestamp="@timestamp"],meta-data=[@version=1])'
# /opt/wildfly/bin/jboss-cli.sh --connect "/subsystem=logging/syslog-handler=syslog-shipping:add(app-name=EJBCA,enabled=true,facility=local-use-0,hostname=$(hostname -f),level=INFO,named-formatter=logstash,port=514,server-address=syslog.server,syslog-format=RFC5424)"
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/root-logger=ROOT:add-handler(name=syslog-shipping)'
ファイルへの監査ログを有効にする
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/size-rotating-file-handler=cesecore-audit-log:add(file={path=cesecore-audit.log, relative-to=jboss.server.log.dir}, max-backup-index=1, rotate-size=128m)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.audit.impl.log4j.Log4jDevice:add'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.audit.impl.log4j.Log4jDevice:add-handler(name=cesecore-audit-log)'
OCSP ログの構成
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:add(use-parent-handlers=false)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:write-attribute(name=level, value=INFO)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:add(queue-length="100")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:write-attribute(name=level, value=DEBUG)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:write-attribute(name="overflow-action", value="BLOCK")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.TransactionLogger:add-handler(name=ocsp-tx-async)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/periodic-rotating-file-handler=ocsp-tx:add(autoflush=true, append=true, suffix=".yyyy-MM-dd", file={path=ocsp-tx.log,relative-to=jboss.server.log.dir})'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-tx-async:add-handler(name=ocsp-tx)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:add(use-parent-handlers=false)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:write-attribute(name=level, value=INFO)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-audit-async:add(queue-length="100")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-audit-async:write-attribute(name=level, value=DEBUG)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-audit-async:write-attribute(name="overflow-action", value="BLOCK")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/logger=org.cesecore.certificates.ocsp.logging.AuditLogger:add-handler(name=ocsp-audit-async)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/periodic-rotating-file-handler=ocsp-audit:add(autoflush=true, append=true, suffix=".yyyy-MM-dd", file={path=ocsp-audit.log,relative-to=jboss.server.log.dir})'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=logging/async-handler=ocsp-audit-async:add-handler(name=ocsp-audit)'
# vi /etc/cron.daily/archive-rotated-ocsp-logs.sh
----- ここから
#!/bin/sh
# Compress the OCSP audit log and the OCSP transaction log after rotation
xz /opt/wildfly/standalone/log/ocsp-tx.log.*
xz /opt/wildfly/standalone/log/ocsp-audit.log.*
----- ここまで
# chmod +x /etc/cron.daily/archive-rotated-ocsp-logs.sh
【 OCSP 】
OCSP(Online Certificate Status Protocol)は、デジタル証明書(公開鍵証明書)の有効性を TCP/IP ネットワークを通じて問い合わせるためのプロトコルです。これにより、デジタル証明書が何らかの理由で有効期限前に失効している場合でも、その情報を迅速に知ることができます。
HTTP(S) 構成
HTTP/HTTPS の構成を行います。
この記事では、管理コンソールに、https://ejbcatest:8443/ejbca/adminweb/
で接続します。
既存の TLS および HTTP 構成を削除します。
以下の操作により、不要なリスナーやソケットバインディングが削除されます。
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/http-listener=default:remove()'
# /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=http:remove()'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/https-listener=https:remove()'
# /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=https:remove()'
# /opt/wildfly/bin/jboss-cli.sh --connect ':reload'
# /opt/wildfly/bin/jboss-cli.sh --connect ':read-attribute(name=server-state)'
1. /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/http-listener=default:remove()'
default-server
という名前のサーバーから、default
という名前の HTTP リスナーを削除します。2. /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=http:remove()'
standard-sockets
という名前のソケットバインディンググループから、http
という名前のソケットバインディングを削除します。3. /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/https-listener=https:remove()'
default-server
という名前のサーバーから、https
という名前の HTTPS リスナーを削除します。4. /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=https:remove()'
standard-sockets
という名前のソケットバインディンググループから、https
という名前のソケットバインディングを削除します。5. /opt/wildfly/bin/jboss-cli.sh --connect ':reload'
6. /opt/wildfly/bin/jboss-cli.sh --connect ':read-attribute(name=server-state)'
3 ポート分離を使用します。
これは、公式ドキュメントで以下のように説明されている部分です。内部的な役割によって、ポートを分ける設定のようです。8443 は Web 管理コンソールです。"3 ポート分離で Undertow をセットアップする方法について説明します。ポート 8080 は HTTP (非暗号化トラフィック) に使用され、ポート 8442 はサーバー認証のみの HTTPS (暗号化) トラフィックに、ポート 8443 はサーバー認証とクライアント認証の両方を含む HTTPS (暗号化) トラフィックに使用されます。"
2 ポート分離の手順もありますが、そちらではなく、3 ポート分離で進めます。
新しいインターフェースとソケットバインディングが作成されます。これにより、サーバーは新たな IP アドレスとポートで接続を受け付けることができます。
# /opt/wildfly/bin/jboss-cli.sh --connect '/interface=http:add(inet-address="0.0.0.0")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/interface=httpspub:add(inet-address="0.0.0.0")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/interface=httpspriv:add(inet-address="0.0.0.0")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=http:add(port="8080",interface="http")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=httpspub:add(port="8442",interface="httpspub")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=httpspriv:add(port="8443",interface="httpspriv")'
1. /opt/wildfly/bin/jboss-cli.sh --connect '/interface=http:add(inet-address="0.0.0.0")'
http
という名前の新しいインターフェースを作成します。このインターフェースは、すべてのIPアドレス(0.0.0.0
)で接続を受け付けます。2. /opt/wildfly/bin/jboss-cli.sh --connect '/interface=httpspub:add(inet-address="0.0.0.0")'
httpspub
という名前の新しいインターフェースを作成します。このインターフェースも、すべてのIPアドレスで接続を受け付けます。3. /opt/wildfly/bin/jboss-cli.sh --connect '/interface=httpspriv:add(inet-address="0.0.0.0")'
httpspriv
という名前の新しいインターフェースを作成します。このインターフェースも、すべてのIPアドレスで接続を受け付けます。4. /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=http:add(port="8080",interface="http")'
standard-sockets
という名前のソケットバインディンググループに、http
という名前の新しいソケットバインディングを追加します。このソケットバインディングは、http インターフェース上の 8080 ポートを使用します。5. /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=httpspub:add(port="8442",interface="httpspub")'
standard-sockets
ソケットバインディンググループに、httpspub
という名前の新しいソケットバインディングを追加します。このソケットバインディングは、httpspub インターフェース上の 8442 ポートを使用します。6. /opt/wildfly/bin/jboss-cli.sh --connect '/socket-binding-group=standard-sockets/socket-binding=httpspriv:add(port="8443",interface="httpspriv")'
standard-sockets
ソケットバインディンググループに、httpspriv
という名前の新しいソケットバインディングを追加します。このソケットバインディングは、httpspriv インターフェース上の 8443 ポートを使用します。【 Undertow 】
Undertow は、Java で書かれた軽量で高性能な Web サーバーです。非ブロッキングのアーキテクチャを採用しており、大量の同時接続を効率的に処理することができます。また、Servlet 3.1、WebSockets、HTTP/2 などの最新の Web 技術をサポートしています。WildFly などのアプリケーションサーバーの内部で使用されることが多いです。
TLS の構成
TLS の構成を設定します。
これにより、Web 管理画面(/ejbca/adminweb/
)へのアクセスは、クライアント証明書が必要になります。
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=httpsKeystorePassword, secret-value="serverpwd")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/credential-store=defaultCS:add-alias(alias=httpsTruststorePassword, secret-value="changeit")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsKS:add(path="keystore/keystore.p12",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsKeystorePassword},type=PKCS12)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-store=httpsTS:add(path="keystore/truststore.p12",relative-to=jboss.server.config.dir,credential-reference={store=defaultCS, alias=httpsTruststorePassword},type=PKCS12)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,algorithm="SunX509",credential-reference={store=defaultCS, alias=httpsKeystorePassword})'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/trust-manager=httpsTM:add(key-store=httpsTS)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/server-ssl-context=httpspub:add(key-manager=httpsKM,protocols=["TLSv1.3","TLSv1.2"],use-cipher-suites-order=false,cipher-suite-filter="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",cipher-suite-names="TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/server-ssl-context=httpspriv:add(key-manager=httpsKM,protocols=["TLSv1.3","TLSv1.2"],use-cipher-suites-order=false,cipher-suite-filter="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",cipher-suite-names="TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256",trust-manager=httpsTM,need-client-auth=true)'
1. /opt/wildfly/bin/jboss-cli.sh(...略...)defaultCS:add-alias(alias=httpsKeystorePassword, secret-value="serverpwd")'
defaultCS
という名前のクレデンシャルストアに httpsKeystorePassword
というエイリアスを追加しています。このエイリアスは serverpwd
という秘密の値を保持します。2. /opt/wildfly/bin/jboss-cli.sh(...略...)defaultCS:add-alias(alias=httpsTruststorePassword, secret-value="changeit")'
defaultCS
という名前のクレデンシャルストアに httpsTruststorePassword
というエイリアスを追加しています。このエイリアスは changeit
という秘密の値を保持します。3. /opt/wildfly/bin/jboss-cli.sh(...略...)httpsKS:add(path="keystore/keystore.p12(...略...)store=defaultCS, alias=httpsKeystorePassword},type=PKCS12)'
httpsKS
という名前のキーストアを作成し、そのパスを keystore/keystore.p12
に設定しています。このキーストアは defaultCS
クレデンシャルストアの httpsKeystorePassword
エイリアスを使用します。4. /opt/wildfly/bin/jboss-cli.sh(...略...)httpsTS:add(path="keystore/truststore.p12"(...略...)store=defaultCS, alias=httpsTruststorePassword},type=PKCS12)'
httpsTS
という名前のキーストアを作成し、そのパスを keystore/truststore.p12
に設定しています。このキーストアは defaultCS
クレデンシャルストアの httpsTruststorePassword
エイリアスを使用します。5. /opt/wildfly/bin/jboss-cli.sh(...略...)httpsKM:add(key-store=httpsKS,algorithm="SunX509"(...略...)store=defaultCS, alias=httpsKeystorePassword})'
httpsKM
という名前のキーマネージャーを作成し、httpsKS
キーストアと SunX509
アルゴリズムを使用します。このキーマネージャーは defaultCS
クレデンシャルストアの httpsKeystorePassword
エイリアスを使用します。6. /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=elytron/trust-manager=httpsTM:add(key-store=httpsTS)'
httpsTM
という名前のトラストマネージャーを作成し、httpsTS
キーストアを使用します。7. /opt/wildfly/bin/jboss-cli.sh(...略...)httpspub:add(key-manager=httpsKM,protocols=["TLSv1.3","TLSv1.2"](...略...):TLS_CHACHA20_POLY1305_SHA256")'
httpspub
という名前のサーバーSSLコンテキストを作成します。このコンテキストはhttpsKM
キーマネージャーを使用し、特定のプロトコルと暗号スイートを指定します。8. /opt/wildfly/bin/jboss-cli.sh(...略...)httpspriv:add(key-manager=httpsKM,protocols=["TLSv1.3","TLSv1.2"](...略...)TLS_CHACHA20_POLY1305_SHA256",trust-manager=httpsTM,need-client-auth=true)'
httpspriv
という名前のサーバーSSLコンテキストを作成します。このコンテキストはhttpsKM
キーマネージャーとhttpsTM
トラストマネージャーを使用し、特定のプロトコルと暗号スイートを指定します。さらに、クライアント認証が必要とされています。【 クライアント認証 】
クライアント認証とは、コンピューターシステムやネットワーク、サービスなどにアクセスする際、アクセス元となるユーザーまたはクライアントがインストール済みのクライアント証明書をアクセス先に提示して、アクセス先が正当なユーザーであることを認証するための仕組みです。
具体的には、クライアント証明書という電子証明書を使用します。この証明書は、認証局によって個人や組織、あるいは端末を認証し発行されます。この証明書がインストールされていない端末からのアクセスは防止できます。
HTTP(S) リスナーの追加
HTTP(S) リスナーの追加を行います。 これらのコマンドにより、HTTP と HTTPS の通信を適切にハンドリングするための設定が行われます。
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/http-listener=http:add(socket-binding="http", redirect-socket="httpspriv")'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/https-listener=httpspub:add(socket-binding="httpspub", ssl-context="httpspub", max-parameters=2048)'
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=undertow/server=default-server/https-listener=httpspriv:add(socket-binding="httpspriv", ssl-context="httpspriv", max-parameters=2048)'
# /opt/wildfly/bin/jboss-cli.sh --connect ':reload'
# /opt/wildfly/bin/jboss-cli.sh --connect ':read-attribute(name=server-state)'
1. /opt/wildfly/bin/jboss-cli.sh(...略...)http-listener=http:add(socket-binding="http", redirect-socket="httpspriv")'
socket-binding="http"
は、HTTP 通信を待ち受けるソケットを指定しています。また、redirect-socket="httpspriv"
は、HTTPS 通信へのリダイレクトを行うソケットを指定しています。2. /opt/wildfly/bin/jboss-cli.sh(...略...)https-listener=httpspub:add(socket-binding="httpspub", ssl-context="httpspub", max-parameters=2048)'
socket-binding="httpspub"
は、HTTPS 通信を待ち受けるソケットを指定しています。ssl-context="httpspub"
は、SSL コンテキストを指定しています。これは、SSL 通信の設定(鍵や証明書など)を含んでいます。max-parameters=2048
は、リクエストパラメータの最大数を指定しています。3. /opt/wildfly/bin/jboss-cli.sh(...略...)https-listener=httpspriv:add(socket-binding="httpspriv", ssl-context="httpspriv", max-parameters=2048)'
この後、公式ドキュメントでは、HSM の設定手順の記述がありますが、スキップします。
【 HSM 】
HSM(ハードウェアセキュリティモジュール)は、一般的に電子証明書の暗号鍵と鍵管理に関する国際規格を取得しているデバイスです。
具体的な規格としては、以下のものがあります:
FIPS 140-2:米国の連邦情報処理標準です。暗号モジュールのセキュリティ要件を定めています。
Common Criteria(コモンクライテリア):IT製品のセキュリティ機能を評価するための国際標準です。
これらの規格は、HSMが暗号鍵の生成、保護、管理などのプロセスを安全に行うことを保証します。
また、これらの規格に準拠しているHSMは、テスト、検証、および認定を受けています。これにより、HSMは高度なセキュリティ要件を満たすことができます。
HTTP プロトコルの動作構成
HTTP プロトコルに関するもろもろの設定を行います。
URI エンコーディングを UTF-8 に設定
# /opt/wildfly/bin/jboss-cli.sh --connect '/system-property=org.apache.catalina.connector.URI_ENCODING:add(value="UTF-8")'
クエリストリングのエンコーディングにボディエンコーディングを使用する
# /opt/wildfly/bin/jboss-cli.sh --connect '/system-property=org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING:add(value=true)'
エンコードされたスラッシュ(%2Fまたは%5C)を許可
# /opt/wildfly/bin/jboss-cli.sh --connect '/system-property=org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH:add(value=true)'
リクエストパラメータの最大数を 2048 に設定
# /opt/wildfly/bin/jboss-cli.sh --connect '/system-property=org.apache.tomcat.util.http.Parameters.MAX_COUNT:add(value=2048)'
バックスラッシュ(\)を許可
# /opt/wildfly/bin/jboss-cli.sh --connect '/system-property=org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH:add(value=true)'
Web サービスサブシステムの wsdl-host 属性を’jbossws.undefined.host’に設定
クライアントが Web サービスを呼び出す際に使用する URL を動的に変更するためのものです。これにより、同じ Web サービスが異なるホストや環境で動作している場合でも、正しいエンドポイントがクライアントに通知されます。
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=webservices:write-attribute(name=wsdl-host, value=jbossws.undefined.host)'
Web サービスサブシステムの modify-wsdl-address 属性を’true’に設定
# /opt/wildfly/bin/jboss-cli.sh --connect '/subsystem=webservices:write-attribute(name=modify-wsdl-address, value=true)'
# /opt/wildfly/bin/jboss-cli.sh --connect ':reload'
公式ドキュメントの手順
Galleon Specific Configuration(Galleon 特有の構成)
Optional Configuration(オプションの構成)
は、スキップします。
【 Galleon 】
Galleonは、Java のアプリケーションサーバーである WildFly の機能の一つで、特定のバージョンや設定の WildFly サーバーを簡単に作成、管理するためのツールです。Galleon を使用すると、必要な機能だけを含むカスタムな WildFly サーバーを作成でき、不要なリソースを消費することなく、効率的にアプリケーションを実行できます。また、Galleonはアップデートやパッチの適用もサポートしています。これにより、WildFly サーバーのライフサイクル管理が容易になります。
※今回は使っていません。
Deploying EJBCA
さて、いよいよ、と言うかやっとですが...EJBCA ソースコードを取得して、ビルドに取り掛かります。
ejbca-ce を git clone
して、/opt/ejbca/ に配置します。
ここで、ejbca
というユーザーを作成して、シェルを bash
に変更しています。
# systemctl enable wildfly
# apt install git -y
# useradd -m -U -r -d /opt/ejbca ejbca
# passwd ejbca
ejbca
# usermod -aG sudo ejbca
# su - ejbca -c "chsh -s $(which bash)"
# git clone https://github.com/Keyfactor/ejbca-ce.git
# mv ejbca-ce/* /opt/ejbca/
# rm -rf ejbca-ce
設定を配置します。
ここで、設定は、全てデフォルト(サンプル設定のまま)とします。
# cd /opt/ejbca
# cp conf/ejbca.properties.sample conf/ejbca.properties
# cp conf/cache.properties.sample conf/cache.properties
# cp conf/logdevices/log4j.properties.sample conf/logdevices/log4j.properties
# cp conf/cesecore.properties.sample conf/cesecore.properties
# cp conf/ocsp.properties.sample conf/ocsp.properties
# cp conf/systemtests.properties.sample conf/systemtests.properties
# cp conf/custom.properties.sample conf/custom.properties
# cp conf/mail.properties.sample conf/mail.properties
# cp conf/catoken.properties.sample conf/catoken.properties
# cp conf/batchtool.properties.sample conf/batchtool.properties
# cp conf/jaxws.properties.sample conf/jaxws.properties
# cp conf/web.properties.sample conf/web.properties
# cp conf/install.properties.sample conf/install.properties
# cp conf/va.properties.sample conf/va.properties
# cp conf/database.properties.sample conf/database.properties
# cp conf/va-publisher.properties.sample conf/va-publisher.properties
環境変数をセットします。
# apt install ant -y
# vi /etc/environment
APPSRV_HOME=/opt/wildfly
EJBCA_HOME=/opt/ejbca
JBOSS_HOME=/opt/wildfly
# export APPSRV_HOME=/opt/wildfly
# export EJBCA_HOME=/opt/ejbca
# export JBOSS_HOME=/opt/wildfly
環境変数を適切にセットしていないと、この後の、
ant -q clean deployear
にて、以下のエラーになり、ビルドに失敗します。BUILD FAILED
/opt/ejbca/build.xml:829: The following error occurred while executing this line:
/opt/ejbca/propertyDefaults.xml:226: 'appserver.type' could not be detected or is not configured. Glassfish 3.1, Glassfish 4.0, JBoss 7.1.1, JBoss EAP 6.1, 6.2, 6.3, 6.4, WildFly 8, 9, 10 can be detected. (Is 'appserver.home' configured?)
設定は、全てデフォルト(サンプル設定のまま)としましたが、ホスト名と DB 関連設定だけ変更します。
# vi conf/web.properties
httpsserver.hostname=ejbcatest
# vi conf/database.properties
database.name=mysql
database.url=jdbc:mysql://127.0.0.1:3306/ejbca
database.driver=org.mariadb.jdbc.Driver
それぞれ、20, 50, 66 行目をコメントアウトする形になります。
ビルドし、デプロイします。
【
ant -q clean deployear
】以下の2つのタスクを実行します:
clean
:プロジェクトのビルド時に生成されたファイルを削除します。これにより、次回のビルドがクリーンな状態から始まることを保証します。
deployear
:EAR(Enterprise Archive)ファイルをビルドし、それをアプリケーションサーバーにデプロイ(配布)します。これにより、新しいまたは更新されたアプリケーションがサーバー上で利用可能になります。
-q
オプションは、「quiet」(静かな)モードを指定します。このモードでは、Ant は必要最低限の情報しか出力しません。これにより、ビルドのログがすっきりとします。
TLS キーストアを WildFly にデプロイする
TLS キーストアを WildFly にデプロイし、/ejbca/adminweb/
へのクライアント認証を可能とします。
公式手順書には、ant deploy-keystore
とだけ説明されているのですが、JKS 形式のキーストアを PKCS12 形式のキーストアに変換する必要があります。
これは、2024 年 2 月時点では公式手順書(https://doc.primekey.com/ejbca/ejbca-installation
)に書かれていませんでした。
変換する手順は、https://github.com/Keyfactor/ejbca-ce/discussions/46
に書かれていました。
【 JKS, PKCS12 】
JKS (Java KeyStore) は、鍵と証明書を保存するための Java の専用フォーマットです。これは Java アプリケーションでよく使われます。
PKCS12 (Public Key Cryptography Standards #12) は、鍵と証明書を保存するための一般的なフォーマットです。これは多くの異なるタイプのアプリケーションで使われます。
これらのフォーマットは、鍵と証明書を安全に保存するために使われます。これらは、通信を暗号化したり、デジタル署名を検証したりするために必要です。それぞれが異なる目的や要件に合わせて設計されています。
例えば、JKS は Java アプリケーション用に設計されていますが、PKCS12 はより広範な用途に対応しています。また、PKCS12 は JKS よりも新しく、一般的にはより安全とされています。そのため、JKS から PKCS12 への変換が推奨されることがあります。
デプロイし、JKS 形式のキーストアを PKCS12 形式のキーストアに変換します。
なお、このとき、p12/superadmin.p12
が生成されて、クライアント証明書として、ブラウザ(今回は、Ubuntu22 の Firefox)に設定する必要があるため、ユーザーの /home/ 配下にコピーしています。
# cp -p $EJBCA_HOME/p12/tomcat.jks $JBOSS_HOME/standalone/configuration/keystore/keystore.jks
# ant deploy-keystore
# cd /opt/wildfly/standalone/configuration/keystore
# keytool -importkeystore -srckeystore keystore.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore keystore.p12
→serverpwd×3回入力
# keytool -importkeystore -srckeystore truststore.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore truststore.p12
→changeit×3回入力
# cd /opt/ejbca
# cp p12/superadmin.p12 /home/admin/
# chown admin /home/admin/superadmin.p12
1. keytool -importkeystore -srckeystore keystore.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore keystore.p12
2. keytool -importkeystore -srckeystore truststore.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore truststore.p12
クライアント証明書インポート
Ubuntu22 の Firefox にクライアント証明書をインポートします。
なお、これを行わないと、Web 管理画面(/ejbca/adminweb/
)にアクセスしたときに、以下のエラーになります。
安全な接続ができませんでした
ejbcatset:8443 への接続中にエラーが発生しました。SSL peer cannot verify your certificate.
エラーコード: SSL_ERROR_BAD_CERT_ALERT
受信したデータの真正性を検証できなかったため、このページは表示できませんでした。
Firefox を起動して、設定 をクリックします。
プライバシーとセキュリティ → 証明書を表示 をクリックします。
あなたの証明書 タブをクリックして、インポート をクリックします。
ホーム(/home/admin)/superadmin.p12 を選択します。
この時、パスワードを聞かれますが、ejbca
を入力します。
Windows の場合、Edge や Chrome は、OS の機能で証明書が管理されます。一方、Firefox の場合、Windows であっても、ブラウザ独自に証明書を管理します。そのため、公式ドキュメントでも Firefox の利用が推奨されていました。
Web 管理画面
# systemctl restart wildfly
として、
URL = https://ejbcatest:8443/ejbca/adminweb
または、
URL = https://localhost:8443/ejbca/adminweb
でアクセスします。
ejbcatest
は今回の手順の場合です。
ヨシっ!
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。