【事象解決】IISサーバーで403エラー【証明書の再バインドで解決】

コンピュータ
あざらし
あざらし

今回は備忘録をかねての記事になります。

仕事でWebサイトが403エラーで表示されなくなってしまいました。

エラー内容的には「アクセス権がない」ということですが、詳しくしらべてみると証明書が信頼できるものでない時もでるようです。

でも、証明書周りを調べても全然、異常がない。。。
有効期限も問題ないし、バインドもされている。。。

原因はどうやら、サーバー証明書と結びついてる中間認証局のインポート場所が変だと、
サーバー証明書の認証が通らなくて発生することがるんだとか。

なぜ、中間認証局が変な場所に入ったかは別問題ですが。
これを解決する手段をこれから記載します!

解決方法

PowerShell使って中間証明書の場所を正しい場所に移動させた後、
CMDを使って、証明書を再バインドしていきます。

証明書の移動

PowerShellを管理者権限で起動します。

1. 中間証明書がrootパスにあることを確認するため、以下のコマンドラインを実行する。
    Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject}

    PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\root

    Thumbprint                        Subject
    ---------                         --------
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  CN=XXXXXXXX , DC=XXXXXXXX, DC=XXXXXX, DC=XXXXXXXXX


2. 配置先が誤っている証明書を然るべき場所に移動するため、以下のコマンドラインを実行する。
    Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject} | Move-Item -Destination Cert:\LocalMachine\CA

3. 証明書が移動されたことを確認するため、手順1のコマンドラインを再実行する。

これで、正しい場所に移動させることができました。

証明書を再バインド

証明書を再バインドするために、一度削除した上で、結び付けをしなおします。

etsh http show sslcert
netsh http show sslcert hostnameport=test.localhost:443
netsh http show sslcert hostnameport=192.168.xxx.xxx:443

1.以下のコマンドを実行して、異常のあるホスト名を探す。
netsh http show sslcert

※ホスト名やIPがわかっている場合は、明示的に指定することもできる。
netsh http show sslcert hostnameport=test.localhost:443
netsh http show sslcert hostnameport=192.168.xxx.xxx:443

2.「Hostname:port」と「Certificate Hosh」と「Application ID」を残しておく
Hostname:port                : test.localhost:443
Certificate Hash             : 証明書のサムプリント
Application ID               : {プリケーションID}
Certificate Store Name       : My
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check                  : Enabled
Revocation Freshness Time    : 0
URL Retrieval Timeout        : 0
Ctl Identifier               : (null)
Ctl Store Name               : (null)
DS Mapper Usage              : Disabled
Negotiate Client Certificate : Disabled
Reject Connections           : Disabled
Disable HTTP2                : Not Set

3.バインドを解除する(手順2で情報を残しておかないと後戻りできません)
netsh http delete sslcert hostnameport=test.localhost:443

4.再度、証明書をバインドする
netsh http add sslcert hostnameport=test.localhost:443 certhash=証明書のサムプリント appid={プリケーションID} certstorename=MY clientcertnegotiation=disable

以上

まとめ

中間証明書が異常な場所にあるために発生した、今回の事象でしたが
ただ、正しい場所に中間証明書を移動させるだけではダメした。

おそらく、すでにバインドされている証明書は間違った中間証明書とも結びついてるので
一旦、サーバー証明書の切り離しと再度結び付ける事をやってあげばいと、正しい中間証明書がわからないんだとおもいます。

後半の作業は慎重に実施しないと、誤って別の証明書を削除しかねないので気をつけてください。

コメント

タイトルとURLをコピーしました