WindowsネットワークでのSSL証明書の扱いは、時に少々面倒になることがあります。カスタムCAを導入する場合でも、サイト固有のSSL証明書を追加する場合でも、あるいは単に煩わしいブラウザの警告を抑制したい場合でも、集中管理が最適な方法です。グループポリシー(GPO)を使用して証明書を配布する方法は一般的ですが、時には面倒です。目標は、ドメイン内のすべてのコンピュータで信頼されたルート証明書を自動的にインストールまたは削除し、毎回「続行」をクリックする手間を省くことです。
証明書をスムーズに処理するための実践的なヒントをいくつかご紹介します。コマンドラインの魔法、GPOの調整、そしてピュロスの勝利といった要素がいくつかあることを覚悟してください。とはいえ、ここまでくれば、マシンはカスタム証明書を問題なく信頼するはずです。
WindowsでSSL/TLS証明書をファイルにエクスポートする方法
エクスポートしたいもの:自己署名証明書、CAルート証明書、あるいは社内で展開しているサイト証明書など。簡単な方法は、ブラウザから取得するか、ストアから直接エクスポートすることです。
ブラウザからエクスポートする(自己署名証明書であることを祈る)
- Microsoft Edge の場合は、アドレス バーの[安全ではありません]アイコンに移動し、 [証明書を表示]をクリックします。
- [詳細]タブに移動して、[エクスポート]をクリックします。
- BASE64形式で.crtまたは.pem拡張子で保存します。ブラウザがクラッシュしたりブロックしたりしない限り、簡単です。
しかし、特に自動化を行う場合、プログラムで証明書を取得しなければならないこともあります。WebRequestを使ったPowerShellの便利なトリックをご紹介します。
$webRequest = [Net. WebRequest]::Create("https://your-internal-site.local") try { $webRequest. GetResponse() } catch {} $getcert = $webRequest. ServicePoint. Certificate $bytes = $getcert. Export([Security. Cryptography. X509Certificates. X509ContentType]::Cert) set-content -value $bytes -encoding byte -path "C:\certs\your-site-certificate.cer"
このハックスクリプトは、サイトのSSL証明書を取得し、CERファイルとしてローカルに保存します。奇妙?そうかもしれません。でも、一応動作します。
Windows 証明書ストアからの手動エクスポート
- 走る
mmc.exe。 - [ファイル] > [スナップインの追加と削除]に移動します。
- コンピューター アカウント(またはユーザー証明書の場合はユーザー アカウント)の証明書を追加します。
- プロンプトが表示されたら[ローカル コンピューター]を選択し、[信頼されたルート証明機関]ストアを展開します。
- 対象の証明書を見つけて右クリックし、[すべてのタスク] > [エクスポート]を選択します。
- DERエンコードされたバイナリX.509(.CER)を選択し、保存場所を指定します。秘密鍵は必要ありませんので、ご安心ください。
グループポリシーを使用して Windows デバイスに証明書をインストールする
このステップでは、対象となるすべてのマシンに証明書をプッシュするGPOを作成します。設定は簡単ですが、正しく行わないと問題が発生する可能性があります。GPMCの高度な機能が必要になることをご承知おきください。
証明書を展開するための GPO を作成してリンクする
- gpmc.mscを開き、証明書が必要なコンピューターを保持している OU に移動します。
- 右クリックして、[このドメインに GPO を作成し、ここにリンクする] を選択します。
- 「内部 CA ルートをデプロイする」のようなわかりやすい名前を付けます。
- 右クリックして編集します。
自動証明書インストールを構成する
- グループ ポリシー管理エディターで、[コンピューターの構成] > [ポリシー] > [Windows の設定] > [セキュリティの設定] > [公開キーのポリシー] > [信頼されたルート証明機関]に移動します。
- 右クリックして、[インポート]を選択します。
- 保存した証明書ファイル (エクスポートした CER) に移動して選択します。
- 信頼されたルート証明機関ストアにインストールするように設定します。秘密キーは必要ありません。
- [OK] をクリックし、複数の証明書を一度に展開する場合は繰り返します (確認のために [発行先]、[有効期限] などのフィールドをチェックする必要がある場合があります)。
GPOを作成したら、gpupdate /forceクライアントで実行してテストしてください。certlm.mscコマンドを使用して、証明書が信頼されたルート証明書ストアに正しく保存されているか確認してください。また、ブラウザに「信頼されていない証明書」という警告が表示されなくなるかどうかも確認してください。
古くなった証明書をクリーンアップまたは置き換えるために、GPO を使用して証明書を削除または更新することもできます。サムプリントのある証明書を見つけて、ポリシーで削除または置き換え、変更をプッシュするだけです。
当然ながら、Windows はあらゆる操作を複雑にする必要があるため、結局同じことを2回行う必要があるかもしれません。頑固な証明書と格闘している場合は、手動で証明書を削除するか、ログオンスクリプト(CertUtil または PowerShell を使用)を使って削除を実行する方が合理的です。
まとめ
- ブラウザまたはサーバーから証明書をエクスポートします。
- GPO を作成し、適切な OU にリンクします。
- GPO を介して証明書を信頼されたルート ストアにインポートします。
- クライアントで gpupdate を強制するか、自動更新を待機します。
- 証明書ストアとブラウザをチェックして成功を確認します。
まとめ
難しいことではありませんが、確かに時々面倒な作業です。一度設定が完了すれば、その価値はあります。警告もサポートへの問い合わせも減ります。GPOを少しだけ活用するだけです。それでも問題が解決しない場合は、期限切れの証明書を手動で削除または更新してみてください。あるいは、証明書ストアを詳しく調べることで、隠れた問題が見つかることもあります。
これで誰かの時間短縮になれば幸いです。大規模ドメインで信頼できる証明書を取得するのは完璧ではありませんが、不可能ではありません。