none
[分享]關於在 Windows Server 2008 R2 中使用企業級 CA 的一些經驗 RRS feed

  • 常规讨论

  • 此文章介紹的經驗或方法,并未進行深度測試,如果要應用在生產環境前,請依據實際情況進行充分測試驗證。

    1). 關於 "LDAP over SSL (LDAPS) Certificate" 一文的補充

    原始鏈接:
    http://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-over-ssl-ldaps-certificate.aspx

    該文中介紹了如何將 Kerberos 驗證證書導入到特定 Service Account 中(該例中爲 NTDS 服務),但這個方法從實際測試看,在 DC 爲 Windows Server 2008 R2 Server Core 版不起作用。
    由於 certutil 不支持將 pfx 文件導入到 NTDS 服務的證書存儲中,所以衹能通過文中介紹的 RSAT 方式導入。

    但如果用 RSAT 方法導入 pfx, 會收到如下錯誤信息:

    ---------------------------
    证书导入向导
    ---------------------------
    不支持将 .pfx 或 .p12 文件导入远程证书存储的操作(Importing a .pfx or .p12 file to a remote certificate store is not supported.)。
    ---------------------------
    确定  
    ---------------------------

    這樣導致該方法無法完成。

    下面介紹針對此問題的變通方法,因爲是針對 Windows Server 2008 R2 Server Core 的,所以下面的步驟盡量通過命令行方式進行。

    1. 首先按照此文複製一個 Kerberos 驗證的副本,需要允許私鑰能導出。
       處於操作方便設置方法是通過 RSAT 在遠程客戶端進行的,其對應的命令行方法,請自行測試。

    2. 在頒發該模板後,開始申請一個 Kerberos 驗證證書。

    3. 這裏用到的方法是全程通過 certreq 進行。這裏大致介紹一下通過 certreq 申請的步驟
      
        certreq -new kerberos.inf kerberos.req
        certreq -adminforcemachine -submit kerberos.req kerberos.cer
        certreq -accept kerberos.cer

        關於 kerberos.inf 申請模板的定義和 certreq 命令用法的相關鏈接:

       Certreq
       http://technet.microsoft.com/en-us/library/cc725793.aspx

       Appendix 3: Certreq.exe Syntax
       http://technet.microsoft.com/en-us/library/cc736326.aspx

    4. 現在就可以通過

       certutil -store my | more

       看到在 DC 的 MY 證書存儲中的 Kerberos 驗證證書。

       可以記錄下其序列號, 然後

       certutil -store my 序列號 | clip

       將内容複製到剪貼板。 你可以將其内容粘貼到記事本中,稍後要用到。

    5. 執行命令

       reg query HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates | clip

       將結果複製到剪貼板中,通過記事本粘貼結果。
       可以看到,在 Certificates 後面有跟著若干一串十六進制數字,這些數字是證書的 HASH。
       現在通過之前獲得 Kerberos 驗證證書内容,找到其 HASH。

    6. 然後執行命令

       reg export HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates\HASH kdc

       其中 HASH 爲占位符,使用實際的值替代。可以在 kdc 後面加上擴展名 .reg,不加也沒關係。
       其實 5,6 兩個步驟,也可以通過 regedit 完成,但是考慮到這個版本的 regedit 不支持通用文件保存對話框,所以用 reg 命令替代。

    7. 通過

       notepad kdc

       打開這個注冊表文本文件, 將文字

       SystemCertificates

       替換爲

       Cryptography\Services\NTDS\SystemCertificates

       替換完後的路徑應該,類似

       HKLM\SOFTWARE\Microsoft\Cryptography\Services\NTDS\SystemCertificates\My\Certificates\HASH   

       最後保存。

    8. 現在執行

       reg import kdc

       完成將 Kerberos 驗證證書導入到 NTDS 服務。

    9. 此操作立即生效,可以通過原文中介紹的方法,在遠程計算機中用 LDP 使用工具以 SSL 方式連接該 DC 的 636 端口。

    10. 同時你也可以先通過

        certutil -exportpfx

        備份 Kerberos 驗證證書, 然後刪除位于 MY 存儲中具有服務器驗證的證書,衹保留位于 NTDS MY 存儲中的證書。以及在刪除前通過

        certutil -store my 證書序列號 kdc.cer

        命令轉儲原有證書,然後將原有證書刪除,最後用沒有私鑰的證書替換到 NTDS 的 MY 存儲中。還包括刪除所有具有服務器驗證的證書,
        觀察有何差異。

        步驟 10 描述的方法衹在測試環境進行。

    11. 這裏提供一個關於 certutil 命令部分未文檔化的參數説明的鏈接:

        Certutil.exe - Undocumented Switches
        http://planetmediocrity.com/2013/10/certutil-exe-undocumented-switches/

    12. 當初在得知 Server Core 對將證書導入到 Service Account 功能支持有限時,一開始不想通過修改系統設置進行,而希望通過 Win32 API 或 .NET 方法進行,但是不盡如意,最後發現直接修改注冊表路徑的方法意外地簡單,也暫時未發現有額外問題。

    2). 如何刪除重建企業 CA 之前頒發的 CA 證書

       如果在刪除企業 CA 後,在重建企業 CA 之前,沒有按照如下 Microsoft 支持

       How to remove manually Enterprise Windows Certificate Authority from Windows 2000/2003 Domain
       http://support.microsoft.com/kb/555151/en-us

       提供的方法進行清理的話, 可以在根證書頒發機構看到之前企業 CA 頒發的 CA 證書。其數量取決於刪除了多少次企業 CA。

       下面這個方法可以用來清理多餘的 CA 證書。

    1. 執行命令導出

          ldifde -d "CN=CA01,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=local" -l cacertificate -f cacertificate
          
          其中 CN=CA01 爲假設的 CA 名稱, DC=contoso,DC=local 爲假設的域。請以實際情況替代。

    2. 打開文件

          notepad cacertificate

    3. 可以觀察到如下内容

          dn: CN=CA01,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=local
          changetype: add
          cACertificate::

          cACertificate:: 後的字符爲經過 Base64 編碼的證書。

    4. 複製從 cACertificate:: 開始到下一個 cACertificate:: 之間的 Base64 字符串。

    5. 然後通過

          echo. > ca

          生成一個 ca 文件,并通過

          notepad ca

          然後用之前複製的字符串替代,確保衹有這些字符串,并保存。
     
    6. 執行命令

          certutil -decode ca ca.cer

          此命令會將 ca 還原爲一個證書文件 ca.cer。

          實際上該命令可以還原任意 Base64 編碼的文件,不論其原始内容是否爲證書,而且對文件大小也沒有特別限制,可以輕鬆還原上 GB 的文件。
          如果提示文件存在,可以添加 -f 參數强制覆蓋。
          與 -decode 對應的參數是 -encode,該參數除了會在編碼後的文件第一行和最後一行添加注釋字符串外,也不存在特別限制。

      
    7. 通過執行命令

       certutil -dump ca.cer

       顯示該證書的内容,來確定其是否爲當前 CA 頒發的證書,通常第一個記錄就是當前 CA 頒發的。

    8. 如果不是,則將該内容按照如下格式編輯:

       dn: CN=CA01,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=local
       changetype: modify
       delete: cACertificate
       cACertificate::
       經過編碼的證書
      -

      - 後面要空一行。每個證書都要按照如上形式編輯。

    9. 保存該文件,這裏假設名稱爲 delete.cacertificate 。
    10. 執行命令

        ldifde -i -f delete.cacertificate

        刪除多餘的 CA 證書。

    11. 對
       
       CN=CA01,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=local

       進行同樣的操作,來刪除多餘的 CA 證書。

    3) 從備份還原 CA 遇到錯誤提示 “Active Directory 证书服务没有启动: 无法加载或验证当前 CA 证书。CA01 数据无效。 0x8007000d (WIN32: 13)。”

       導致這個問題的原因,可能是 CA 服務配置中存儲證書 HASH 的 CACertHash 值不匹配。

       解決方法,

    1.  通過

       certutil -store ca

       獲取正確的證書 HASH。

    2. 通過

       certutil -setreg ca\cacerthash "d6 fe 16 fa 0e 8b f3 c8 71 ce fa 61 95 1a ca aa 01 02 03 04\n"

       此處的 HASH 爲舉例。
      
       或者通過
      
       regedit

       定位到

       HKLM\SYSTEM\CurrentControlSet\services\CertSvc\Configuration\CA名稱

       對 CACertHash 的值進行替換。

    3. 最後重新啓動 certsvc 服務。

       sc stop certsvc
       sc start certsvc
       sc query certsvc

    4) 對 AD 備份的建議

       如果是單獨備份 CA,那麽在通過

       certutil -backup

       備份私鑰和數據庫的同時,也建議一并備份目錄

       %WINDIR%\system32\CertSrv

       注冊表項

       HKLM\SOFTWARE\Microsoft\Cryptography
       HKLM\SOFTWARE\Microsoft\EnterpriseCertificates  
       HKLM\SOFTWARE\Microsoft\SystemCertificates
       HKLM\SYSTEM\CurrentControlSet\services\CertSvc

       這樣在恢復時,應該具有幫助。


    Folding@Home

    2014年7月17日 14:14

全部回复