ウェブサーバ - クライアント証明書 - 証明書の設置

 クラウディア
1. 概要
2. サーバ証明書
3. クライアント証明書を「VirtualHost」で有効化
4. クライアント証明書を「Directory」で有効化
5. Forbidden になるとき

1. 概要

 前ページまで、「あそこを読んで」とか「ここを参照して」ばっかりでしたが、いよいよ、証明書設置の具体例です。  本ページは、下記のサイトを参考にさせていただきました。
Let’s Encryptと自己認証局でクライアント証明書接続」
「クライアント証明書の発行方法

2. サーバ証明書

 まぁ、ここも重複してしまいますが、一応、サーバ証明書の設置方法についても書いておきます。  「Let's Encrypt」で作成した証明書は。
/usr/local/etc/letsencrypt/live//
Plain
 以下に存在するはずです。
/usr/local/etc/apache24/extra/httpd-ssl.conf
Plain
 内に。
SSLCertificateFile          /usr/local/etc/letsencrypt/live//cert.pem
SSLCertificateKeyFile       /usr/local/etc/letsencrypt/live//privkey.pem
SSLCertificateChainFile     /usr/local/etc/letsencrypt/live//chain.pem
Apache Configuration
 と書いておけば、サーバ証明書が有効になっているはずです。  「chain.pem」は、「apache」のバージョンによっては、定義してはいけないらしい・・・が未確認です。

3. クライアント証明書を「VirtualHost」で有効化

 サブドメインを定義して、「VirtualHost」内で、クライアント証明書を提示することを必要とするように定義するには。
/usr/local/etc/apache24/Includes/hogehoge.conf
Plain
 に。
Alias   /hogehoge       "/ドキュメントパス/"

<VirtualHost *:443>
    ServerName          :443
    DocumentRoot        /

    SSLEngine           on
    SSLCertificateFile          /Let's Encrypt /cert.pem
    SSLCertificateKeyFile       /Let's Encrypt /privkey.pem
    SSLCertificateChainFile     /Let's Encrypt /chain.pem

    SSLCACertificateFile        //demoCA/cacert.pem
    SSLCARevocationFile         //cert.pem

    SSLVerifyClient     require
</VirtualHost>


<Directory "/ドキュメントパス/">
	Options +ExecCGI +Followsymlinks -Indexes +Includes
	AllowOverride All

	<RequireAll>
		Require all granted

		Require not ip 
	</RequireAll>
</Directory>
Apache Configuration
 てな感じで記述します。  7~15行が、肝心なので、その他の行はテキトーです。

4. クライアント証明書を「Directory」で有効化

 特定のディレクトリ配下に、制限をかける場合。
/usr/local/etc/apache24/extra/httpd-ssl.conf
Plain
 内に。
SSLCACertificateFile        //demoCA/cacert.pem
SSLCARevocationFile         //cert.pem
Apache Configuration
 を記述したうえで。
/usr/local/etc/apache24/Includes/fugafuga.conf
Plain
 に。
Alias /fugafuga/ "/ドキュメントルート/サブディレクトリ/"

<Directory "/ドキュメントルート/サブディレクトリ/">
    Options             None
    AllowOverride       Limit

    SSLVerifyClient     require

    <RequireAll>
        Require all granted
    </RequireAll>
</Directory>
Apache Configuration
 と記述します。  これは、1行目と、7行目が、ミソなわけで、後の行はテキトー。  これで、ブラウザから。
https:///fugafuga
.properties
 以下にアクセスするには、クライアント証明書が必要になります。

5. Forbidden になるとき

 特に、設置方法に誤りはないのに、クライアントでサイトを表示すると。
Forbidden
You don't have permission to access this resource.Reason: Cannot perform Post-Handshake Authentication.
Plain
 てなエラーが表示されることがあります。
「ブラウザ」-「Forbidden」
 てな感じね。
 サーバ側のログを見ると。

[Tue Apr 09 15:25:30.213314 2024] [ssl:error] [pid 13745:tid 34544382720] [client 111.239.158.206:50206] AH10158: cannot perform post-handshake authentication
[Tue Apr 09 15:25:30.213341 2024] [ssl:error] [pid 13745:tid 34544382720] SSL Library Error: error:0A000117:SSL routines::extension not received
Plain
 てな、ログが出力されております。  なんか、「TLS」のバージョンが合わない(「TLS」が何かわかっておりませんが)とこうなるらしい。
/usr/local/etc/apache24/extra/httpd-ssl.conf
Plain
 の。
SSLProtocol all -SSLv3
Apache Configuration
 を。
SSLProtocol -All +TLSv1.2
Apache Configuration
 と書き換えることで、解消します。
ハイスピードプラン【usus ウズウズ】