none
証明機関再構築後のLDAPS接続時の証明書について RRS feed

  • 質問

  • お世話になります。

    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の名前になっています。

    以上、よろしくお願いいたします。

    2016年1月29日 7:37

回答

  • チャブーンです。

    ドメインコントローラのLDAPS通信は、証明機関の証明書(certutil -cainfoで表示される証明書情報のこと)がキーになっているわけではありません。証明機関がドメインコントローラに自動的に発行する「ドメインコントローラー証明書」を使っているのです。

    古いドメインコントローラ証明書を削除するとよいと思います。ドメインコントローラのMMCスナップインから[証明書]-[ローカルコンピューター]を選択し、[個人]ストア内にあるドメインコントローラ名が記載された証明書がそれに当たります。有効期間を確認すれば、どちらが古いものか簡単にわかると思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    • 回答の候補に設定 佐伯玲 2016年2月1日 1:34
    • 回答としてマーク 佐伯玲 2016年2月18日 1:13
    2016年1月30日 6:27
    モデレータ
  • 確認しました。

    一番最初(1月30日)にご指摘いただいた内容で、正常になっていたようです。

    グループポリシーの適用を行っていなかったため、当時はLDAPS接続できませんでしたが、

    いつの間にかLDAPS接続できるようになっていました。

    念のため、更に証明機関の再構築を行い、古い証明機関の証明書を削除後に、

    グループポリシーの適用でLDAPS接続できることを確認しました。

    チャブーン様 ありがとうございました。

    • 回答としてマーク gabuhana 2016年2月16日 10:19
    2016年2月16日 10:19

すべての返信

  • チャブーンです。

    ドメインコントローラのLDAPS通信は、証明機関の証明書(certutil -cainfoで表示される証明書情報のこと)がキーになっているわけではありません。証明機関がドメインコントローラに自動的に発行する「ドメインコントローラー証明書」を使っているのです。

    古いドメインコントローラ証明書を削除するとよいと思います。ドメインコントローラのMMCスナップインから[証明書]-[ローカルコンピューター]を選択し、[個人]ストア内にあるドメインコントローラ名が記載された証明書がそれに当たります。有効期間を確認すれば、どちらが古いものか簡単にわかると思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    • 回答の候補に設定 佐伯玲 2016年2月1日 1:34
    • 回答としてマーク 佐伯玲 2016年2月18日 1:13
    2016年1月30日 6:27
    モデレータ
  • チャブーン様返信ありがとうございます。

    確かに、証明書(ローカルコンピューター)の個人ストア内に、初回構築した証明書と、再構築した証明書の2つがありました。

    そこで有効期限やシリアル番号で古い証明書が判別できましたので、古い証明書を削除してOSを再起動しました。

    古い証明書では接続できなくなりましたが、新しい証明書でも接続できません。

    ちなみに接続NGになるたびにイベントビューアーでは、ソース:Schanne、イベントID:36886の警告が出ます。

    何か設定で漏れがあるのでしょうか。


    • 編集済み gabuhana 2016年2月1日 6:35
    2016年2月1日 5:49
  • チャブーンです。

    古い証明書では接続できなくなりましたが、新しい証明書でも接続できません。

    LDAPSクライアント側にインストールされた、「信頼されたルート証明書」ストアにインポートされた「古いルート証明書」も、同様に削除すればよいように思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    2016年2月1日 9:23
    モデレータ

  • チャブーン様返信ありがとうございます。

    クライアント側の証明書ストアには「古いルート証明書」はありません。

    具体的なLDAPS接続方法を記載します。
    javaのkeytoolコマンドでトラストストアファイルを2つ作り、片方に「古いルート証明書」、もう片方に「新しいルート証明書」をインポートします。
    ユーザーを認証するために、javaのプログラムでActive Directory上に生成したユーザーのユーザープリンシパル名とパスワードによりLDAPS接続でバインドします。
    この時に使用する証明書としてトラストストアファイルを1つ指定します。
    (順番にトラストストアファイルを切り替えて確認しています。)
    デバッグでトラストストアファイル内のルート証明書のシリアル番号を確認していますので、ルート証明書のインポートミスはないと思います。
    (CA再構築前は接続できたのでjavaの問題でもないと思います。)
    2016年2月1日 11:03
  • チャブーンです。

    そのLDAPSクライアントですが、「Windowsドメインに参加」していますか?

    参加している場合、コンピュータアカウント側に[ルート証明書]が自動的に配布されます。自動配布された古いルート証明書が悪影響を与えている可能性がありますので、以下の方法で確認および古いルート証明書を削除してください。

    クライアントのMMCスナップインから[証明書]-[ローカルコンピューター]を選択し、[信頼されたルート証明書]ストア内にある証明機関名が記載された証明書がそれに当たります。おそらく4つあると思いますので、そのうち古いもの2つを削除し、クライアントを再起動してみてください。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2016年2月3日 2:47
    モデレータ
  • チャブーン様返信ありがとうございます。

    LDAPSクライアントはWindowsドメインには参加していません。

    あるサーバー(Linux系OS)上で稼働するWebアプリケーションへのログインで、
    Active Directory 上のユーザーのユーザープリンシパル名とパスワードを使用して認証します。
    (バインドするだけで値を持ってくることはありません。)
    また特権ユーザーで Active Directory 上のユーザーのパスワード変更もします。
    ですので、Active Directory へはネイティブなLDAPSでのバインドにしか使用していません。

    2016年2月3日 5:45
  • チャブーンです。

    この件ですが、もしかしたらですが新しい証明機関の「ドメインコントローラ証明書」が発行されていないことが原因なのかもしれません。

    ドメインコントローラには自動的に複数の証明書が発行されます(Kerberos証明書等)が、新しく証明機関を再作成した場合、ドメインコントローラの[個人]ストアに、既存のドメインコントローラ証明書が存在している場合、新しい証明機関用のドメインコントローラ証明書の要求は行わないようですね。

    古い証明機関からの発行かどうかは、(有効期間よりも)はっきりわかる[発行者]の名前を確認してください。[<ドメイン名>-<サーバ名>-CA-1]と書いてあれば、新しい証明機関のものになります。

    新しい証明機関から証明書を発行するには、以下の設定を行うといいようです。

    • ドメインコントローラの[ローカルコンピュータ]証明書スナップインで、[個人]ストアにある古い証明機関が発行した証明書をすべて削除
    • コマンドプロンプトから gpupdate /force を実行

    この状態で[個人]ストアを更新してもらえれば、必要な証明書類はすべて再作成されているはずです。

    この状態であれば、多分うまくいくのではないかと思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2016年2月5日 4:23
    モデレータ
  • チャブーン様返信ありがとうございます。

    今は手元に確認できる環境がありませんので、月曜日以降に確認してみます。

    2016年2月6日 4:12
  • 確認しました。

    一番最初(1月30日)にご指摘いただいた内容で、正常になっていたようです。

    グループポリシーの適用を行っていなかったため、当時はLDAPS接続できませんでしたが、

    いつの間にかLDAPS接続できるようになっていました。

    念のため、更に証明機関の再構築を行い、古い証明機関の証明書を削除後に、

    グループポリシーの適用でLDAPS接続できることを確認しました。

    チャブーン様 ありがとうございました。

    • 回答としてマーク gabuhana 2016年2月16日 10:19
    2016年2月16日 10:19