トップ回答者
証明機関再構築後のLDAPS接続時の証明書について

質問
-
お世話になります。
Windows Server 2012のActiveDirectoryに対してLDAPSでの接続をさせようとしています。
ActiveDirectory上に証明機関を構築して、その証明書でのLDAPS接続はできました。
しかし一度、証明機関を削除して再構築すると、新しい証明書ではLDAPS接続できず、
削除したはずの証明機関の証明書でLDAPS接続できる状態になりました。
サーバー自体を再起動しましたが変化は見られません。
新しい証明書でLDAPS接続できるようにする方法をご教示ください。
以下、ActiveDirectoryでの設定手順です。
1.「役割と機能の追加」で「Active Directory 証明書サービス」をインストール
2.Active Directory 証明書サービスを構成
構成する役割サービス:証明機関
セットアップの種類:エンタープライズ CA
CAの種類:ルート CA
秘密キーの種類:新しい秘密キーを作成する
暗号化オプション:
暗号化プロバイダー:RSA#Microsoft Software Key Storage Provider
キー長:2048
このCAから発行された署名に使用するハッシュアルゴリズム:SHA1
CAの名前:すべてデフォルト
有効期間:20年間
データベースの場所:すべてデフォルト3.Windows Server 2012の再起動
4.mmcの「スナップインの追加と削除」で証明書(ユーザーアカウント)を追加
信頼されたルート証明機関→「証明書」→作成したCAの証明書をDER形式でエクスポート。5.証明書をローカルにコピーしてkeytoolコマンドを使用してトラストストアファイルにインポート
6.トラストストアファイルを使用してLDAPS接続OK
7.「役割と機能の削除」で、「Active Directory 証明書サービスツール」と「証明機関管理ツール」を管理ツールを削除するを選択して削除
8.手順1から5を実施
9.CA再構築後のトラストストアファイルを使用してLDAPS接続NG
初回構築したCAのトラストストアファイルを使用してLDAPS接続OK
なお、CA再構築後、certutil -cainfoコマンドを実行すると、再構築後のCAの名前になっています。
以上、よろしくお願いいたします。
回答
-
チャブーンです。
ドメインコントローラのLDAPS通信は、証明機関の証明書(certutil -cainfoで表示される証明書情報のこと)がキーになっているわけではありません。証明機関がドメインコントローラに自動的に発行する「ドメインコントローラー証明書」を使っているのです。
古いドメインコントローラ証明書を削除するとよいと思います。ドメインコントローラのMMCスナップインから[証明書]-[ローカルコンピューター]を選択し、[個人]ストア内にあるドメインコントローラ名が記載された証明書がそれに当たります。有効期間を確認すれば、どちらが古いものか簡単にわかると思います。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
すべての返信
-
チャブーンです。
ドメインコントローラのLDAPS通信は、証明機関の証明書(certutil -cainfoで表示される証明書情報のこと)がキーになっているわけではありません。証明機関がドメインコントローラに自動的に発行する「ドメインコントローラー証明書」を使っているのです。
古いドメインコントローラ証明書を削除するとよいと思います。ドメインコントローラのMMCスナップインから[証明書]-[ローカルコンピューター]を選択し、[個人]ストア内にあるドメインコントローラ名が記載された証明書がそれに当たります。有効期間を確認すれば、どちらが古いものか簡単にわかると思います。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
-
-
チャブーンです。
古い証明書では接続できなくなりましたが、新しい証明書でも接続できません。
LDAPSクライアント側にインストールされた、「信頼されたルート証明書」ストアにインポートされた「古いルート証明書」も、同様に削除すればよいように思います。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
-
チャブーン様返信ありがとうございます。
クライアント側の証明書ストアには「古いルート証明書」はありません。
具体的なLDAPS接続方法を記載します。
javaのkeytoolコマンドでトラストストアファイルを2つ作り、片方に「古いルート証明書」、もう片方に「新しいルート証明書」をインポートします。
ユーザーを認証するために、javaのプログラムでActive Directory上に生成したユーザーのユーザープリンシパル名とパスワードによりLDAPS接続でバインドします。
この時に使用する証明書としてトラストストアファイルを1つ指定します。
(順番にトラストストアファイルを切り替えて確認しています。)
デバッグでトラストストアファイル内のルート証明書のシリアル番号を確認していますので、ルート証明書のインポートミスはないと思います。
(CA再構築前は接続できたのでjavaの問題でもないと思います。) -
チャブーンです。
そのLDAPSクライアントですが、「Windowsドメインに参加」していますか?
参加している場合、コンピュータアカウント側に[ルート証明書]が自動的に配布されます。自動配布された古いルート証明書が悪影響を与えている可能性がありますので、以下の方法で確認および古いルート証明書を削除してください。
クライアントのMMCスナップインから[証明書]-[ローカルコンピューター]を選択し、[信頼されたルート証明書]ストア内にある証明機関名が記載された証明書がそれに当たります。おそらく4つあると思いますので、そのうち古いもの2つを削除し、クライアントを再起動してみてください。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2016年2月3日 2:48
-
チャブーン様返信ありがとうございます。
LDAPSクライアントはWindowsドメインには参加していません。
あるサーバー(Linux系OS)上で稼働するWebアプリケーションへのログインで、
Active Directory 上のユーザーのユーザープリンシパル名とパスワードを使用して認証します。
(バインドするだけで値を持ってくることはありません。)
また特権ユーザーで Active Directory 上のユーザーのパスワード変更もします。
ですので、Active Directory へはネイティブなLDAPSでのバインドにしか使用していません。 -
チャブーンです。
この件ですが、もしかしたらですが新しい証明機関の「ドメインコントローラ証明書」が発行されていないことが原因なのかもしれません。
ドメインコントローラには自動的に複数の証明書が発行されます(Kerberos証明書等)が、新しく証明機関を再作成した場合、ドメインコントローラの[個人]ストアに、既存のドメインコントローラ証明書が存在している場合、新しい証明機関用のドメインコントローラ証明書の要求は行わないようですね。
古い証明機関からの発行かどうかは、(有効期間よりも)はっきりわかる[発行者]の名前を確認してください。[<ドメイン名>-<サーバ名>-CA-1]と書いてあれば、新しい証明機関のものになります。
新しい証明機関から証明書を発行するには、以下の設定を行うといいようです。
- ドメインコントローラの[ローカルコンピュータ]証明書スナップインで、[個人]ストアにある古い証明機関が発行した証明書をすべて削除
- コマンドプロンプトから gpupdate /force を実行
この状態で[個人]ストアを更新してもらえれば、必要な証明書類はすべて再作成されているはずです。
この状態であれば、多分うまくいくのではないかと思います。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP, Moderator 2016年2月5日 4:30
- 回答の候補に設定 佐伯玲 2016年2月8日 1:28