クライアント証明書

Apache のクライアント証明書認証の設定手順

2023年05月29日

SSLサーバ証明書のインストール

1. SSLサーバ証明書と秘密鍵をWebサーバに保存します(ファイル名、保存ディレクトリは任意です)。

SSLサーバ証明書ファイル: server.cer
SSLサーバ証明書の秘密鍵ファイル: server.key
保存先ディレクトリ: /etc/httpd/temp

2. ssl.confファイルで以下の設定を行い、SSL通信(ポート443)を有効にします。

■ssl.conf ファイル設定例

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
# SSL通信の有効化(A)
SSLEngine on
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
# SSLサーバ証明書の指定
SSLCertificateFile /etc/httpd/temp/server.cer
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
# SSLサーバ証明書の秘密鍵の指定
SSLCertificateKeyFile /etc/httpd/temp/server.key

クライアント証明書認証の設定

① CA 証明書を取得し Web サーバに保存します(ここでは以下のとおりとします)。
・ CA 証明書ファイル:fujissl.crt
・ Web サーバでの保存先ディレクトリ:/etc/httpd/temp
② ssl.conf ファイルにて、以下のディレクティブで設定します。
・ クライアント証明書による認証を有効にする
・FujiSSLの発行局、且つ条件に合致した証明書のみを受け付けるように設定する
(1) FujiSSLの発行局のみ受け付ける
CN=FujiSSL RSA Client Authentication and Secure Email CA

(2) 条件に合致した証明書(ここでは認証済みのメールアドレスのみ受け付けます)
E=メールアドレス
【補足】
これらのレコードはクライアント証明書の下記の情報になります。

■ssl.conf ファイルの設定例

# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
SSLCACertificateFile /etc/httpd/temp/fujissl.crt
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
SSLVerifyClient require
SSLVerifyDepth 10
# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.

# FujiSSLの発行局、且つ条件に合致した証明書のみを受け付ける
#認証済みのメールアドレスのみ受け付ける
<Location />
SSLRequire ( \
 %{SSL_CLIENT_I_DN_CN} eq " FujiSSL RSA Client Authentication and Secure Email CA " \
 and %{SSL_CLIENT_S_DN_E} eq "メールアドレス" \
 )
</Location>

【補足】
・Location は環境に応じて設定してください。

失効リスト(CRL)の設定

① 配布ポイントから取得した DER 形式の失効リストを PEM 形式に変換しマージしたファイルを Web サーバに保存します(ここでは以下のとおりとします)。
・失効リストファイル:crl.pem
・Web サーバでの保存先ディレクトリ:/etc/httpd/temp
② ssl.conf ファイルにて以下のディレクティブで設定します。
■ssl.conf ファイルの設定例

# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
<Location /> #環境に応じて設定
SSLRequire ( \
 %{SSL_CLIENT_I_DN_CN} eq " FujiSSL RSA Client Authentication and Secure Email CA 
)
</Location>
SSLCARevocationCheck leaf
SSLCARevocationFile /etc/httpd/temp/crl.pem

【補足】
・「SSLCARevocationCheck」「SSLCARevocationFile」設定は、デフォルトの ssl.conf ファイルには
用意されておりませんので、クライアント証明書認証設定に続けて記載ください。
・SSLCARevocationCheck には「leaf」を設定ください。

③ 配布ポイントの失効リストは適宜更新されますので、以下のとおりスクリプトを作成し Web サーバの
失効リスト(crl.pem)も cron 等で定期的に自動取得&更新するように設定します。
■スクリプト例

#!/bin/sh
cd /etc/httpd/temp/download
wget 'http://nijimo.crl.sectigo.com/FujiSSLRSAClientAuthenticationandSecureEmailCA.crl'
openssl crl -inform der -in cdp.crl -outform pem -out crl.pem
cd /etc/httpd/temp
rm -f crl.pem
cp -p /etc/httpd/temp/download/crl.pem ./
service httpd restart

【補足】
・/etc/httpd/temp/download は、配布ポイントの失効リストファイルをダウンロードするディレクト
リになります。スクリプトを実行する前にあらかじめ作成ください。

8. Appendix4(PEM 形式のルート・中間証明書)
以下、リポジトリで公開するルート・中間証明書を PEM 形式にした内容です。
※上段がルート、中段が中間(CA3)、下段が中間(CA4)の証明書の内容となります。
ルートと許可する証明書の発行局のみ中間証明書として設定ください。
テキストファイルへコピー&ペーストし、本手順を例に、”fujissl.crt”というファイル名で、
“配置 PATH”/ fujissl.crt に配置します。

Bag Attributes
    friendlyName: Sectigo (AAA)
subject=/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services
-----BEGIN CERTIFICATE-----
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----
Bag Attributes: 
subject=/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services
-----BEGIN CERTIFICATE-----
MIIFgTCCBGmgAwIBAgIQOXJEOvkit1HX02wQ3TE1lTANBgkqhkiG9w0BAQwFADB7
MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD
VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE
AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4
MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5
MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO
ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0
aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sI
s9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnG
vDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQ
Ijy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfb
IWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0
tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97E
xwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNV
icQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5
D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJ
WBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ
5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzG
KAgEJTm4Diup8kyXHAc/DVL17e8vgg8CAwEAAaOB8jCB7zAfBgNVHSMEGDAWgBSg
EQojPpbxB+zirynvgqV/0DCktDAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rID
ZsswDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAG
BgRVHSAAMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29t
L0FBQUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr
BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUA
A4IBAQAYh1HcdCE9nIrgJ7cz0C7M7PDmy14R3iJvm3WOnnL+5Nb+qh+cli3vA0p+
rvSNb3I8QzvAP+u431yqqcau8vzY7qN7Q/aGNnwU4M309z/+3ri0ivCRlv79Q2R+
/czSAaF9ffgZGclCKxO/WIu6pKJmBHaIkU4MiRTOok3JMrO66BQavHHxW/BBC5gA
CiIDEOUMsfnNkjcZ7Tvx5Dq2+UUTJnWvu6rvP3t3O9LEApE9GQDTF1w52z97GA1F
zZOFli9d31kWTz9RvdVFGD/tSo7oBmF0Ixa1DVBzJ0RHfxBdiSprhTEUxOipakyA
vGp4z7h/jnZymQyd/teRCBaho1+V
-----END CERTIFICATE-----
Bag Attributes: 
subject=/C=JP/ST=Tokyo/L=Shibuya-ku/O=Nijimo K.K./CN=FujiSSL RSA Client Authentication and Secure Email CA
issuer=/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
-----BEGIN CERTIFICATE-----
MIIGCTCCA/GgAwIBAgIQMszoFbZBZn8ZU14z48d3EDANBgkqhkiG9w0BAQwFADCB
iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTkw
NTE1MDAwMDAwWhcNMjkwNTE0MjM1OTU5WjCBiDELMAkGA1UEBhMCSlAxDjAMBgNV
BAgTBVRva3lvMRMwEQYDVQQHEwpTaGlidXlhLWt1MRQwEgYDVQQKEwtOaWppbW8g
Sy5LLjE+MDwGA1UEAxM1RnVqaVNTTCBSU0EgQ2xpZW50IEF1dGhlbnRpY2F0aW9u
IGFuZCBTZWN1cmUgRW1haWwgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCO6xMIpQRMk7n0vuGh+5gFjvfcc8ZfjBcAHrnhszDCIIA7OZ9c6Tar8ZCr
r7Ubk/zd1R0M7KNxSd15QplSP6x/CP/FPkJrXmeowpfyS4tg7FrjCyEEj5voaWH3
2k4/ggDJ3O31KNYr0KQiOLsKoG0oDMVGbYwbK7DGGN4TnOK11ci/LNbsxg057YZ7
vz6sSrmsMtuKkgUCwM0eDT7+7g0g9/iuFJrLTwcw+0Fphv4ucpxQKRlthaUD9oiK
xmgQZ4IW83EK+xKi4V3ng86VMvbrlleKBmXO1xz2HCEsnlKleAALQZ90Z/aCCPhq
69wonfLpUMVcVY6QOLB27RriD/XlAgMBAAGjggFrMIIBZzAfBgNVHSMEGDAWgBRT
eb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUj1oRO7CxZmG222LF5F3o8EGZ
haswDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYw
FAYIKwYBBQUHAwIGCCsGAQUFBwMEMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAkUw
UAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJU
cnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYGCCsGAQUFBwEBBGow
aDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VTRVJUcnVz
dFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2Vy
dHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQBM+ibRuxYRElYP1vcsPaHJK0FA
i5g8Q1uv9ClnSAjK6HzMZH2qQlidLIrR/MyFLlqwkeV60CVd27dvQik4ELmmvf89
E57P/y4467TfI7Kzpe7Hg9ghZiV4qYChH4xILGOIS7Slu+LX0rjlhu8l31lb/LsL
wirfSsy0A8Wz1ZaQquVMzeRR2GpO9Kt+UUpPiKqpLxtgl2QPgOLlmWQ95W0PpdQL
62XQMl0ViISDgaRp8jyDqjMb3/RSZbpBYUV7uacuDtNGIealqE8C/uG1Qb3z5/Mu
EPCyHdLhDB/pCSX8l/30C/Liv+TCHb8bQrkk109uP6hP/e4ugTr91G3oPOAJqoGz
3dWWQfOjTAGYCY62Q3Hrx5AAQ86HwXNZ4F6lGWmTIF48TFE07To/Y+cz960s0NrN
LjPV4de6bZz5VpM4OOYfaEubcq8XVm5UoBmscrzsnKlIKm5DrqW2MmQQiJVC+uSi
DPPzQN+xiXzQdQyu58KaznnDhZ08fZMaNFv6jtWt3HB+eVBrgBE8Ou/mJHIthmUN
HlEIVWSeM/oDZCptGn6VM1skHLqDD96UIvlKFIktwJMNxYC4qdzGCDT5/vCnn4bx
7h40gDzWZix6fq7OpRzbjzY0m+tafAF8tyl7n9KI7M01wGquXVgFXyOosOOqiHnB
u3QatcH2DryuND1qmw==
-----END CERTIFICATE-----

【注意事項】
上記データをコピー&ペーストしたとき改行が入らない場合があります。その時は PDF 資料を別のエディタ(Adobe 等)でオープンしてコピー&ペーストしてください(改行が入らないと CA 証明書が Apacheに正しく認識されません)。

以上

よく読まれている質問