9.2. PostgreSQL レルムの管理
ユーザーを追加して EST Users グループに関連付けるには、次のコマンドを実行します。
psql -U est -t -A -c "INSERT INTO users VALUES ('est-test-user', 'EST TEST USER', '<tomcat_digest>');" est psql -U est -t -A -c "INSERT INTO group_members VALUES ('EST Users', 'est-test-user');" est
$ psql -U est -t -A -c "INSERT INTO users VALUES ('est-test-user', 'EST TEST USER', '<tomcat_digest>');" est
$ psql -U est -t -A -c "INSERT INTO group_members VALUES ('EST Users', 'est-test-user');" est
パスワードの tomcat ダイジェストは次のコマンドで取得できます。
tomcat-digest <user_password>
$ tomcat-digest <user_password>
9.2.1. TLS 相互認証
上記の設定により、username/password を使用したクライアント認証が可能になります。場合によっては、または新しい証明書の再登録などの特定の操作では、クライアント証明書との相互認証が必要になります。
レルム設定では、証明書ベースの認証がすでにサポートされていますが、ユーザーを認証するには、いくつかの追加情報が必要です。さらに詳しく言うと、ユーザーエントリーには、証明書の詳細とバイナリー証明書を含む description が含まれている必要があります。
description の形式は、<Version>;<Serial>;<Issuer>;<subject>
です。バージョンは 16 進法の値 (0x なし)、シリアルは 10 進法で、発行者とサブジェクトは識別名 (DN) です。DN の形式は、より具体的な属性からより一般的な属性となり (注記: OpenSSL などの一部のツールでは順序が異なります)、コンマで区切られます。
これらの情報は user_certs テーブルに保存されます。たとえば、ユーザーが次の値を持つ証明書を持っているとします。
openssl x509 -in cert.pem -subject -serial -issuer -text -noout |head -11
$ openssl x509 -in cert.pem -subject -serial -issuer -text -noout |head -11
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
33:1c:9e:b7:9a:2d:cc:17:69:24:a2:81:4e:06:07:40
Signature Algorithm: sha256WithRSAEncryption
Issuer: O=EXAMPLE, OU=pki-tomcat, CN=CA Signing Certificate
Validity
Not Before: Jan 16 11:31:11 2025 GMT
Not After : Apr 16 11:31:11 2025 GMT
Subject: CN=test.example.com
上記で定義したユーザーエントリー est-test-user
には、user_certs テーブルの新しいエントリーが必要です。これは、次のように追加できます。
psql -U est -t -A -c "INSERT INTO user_certs VALUES ('est-test-user', '2;67939231264256858734977554404570695488;CN=CA Signing Certificate,OU=pki-tomcat,O=EXAMPLE;CN=test.example.com', pg_read_binary_file('/cert.der'));" est
$ psql -U est -t -A -c "INSERT INTO user_certs VALUES ('est-test-user', '2;67939231264256858734977554404570695488;CN=CA Signing Certificate,OU=pki-tomcat,O=EXAMPLE;CN=test.example.com', pg_read_binary_file('/cert.der'));" est