Linux

Windows server 2012 Sub CA 失敗,因為在使用來自 Linux/OpenSSL 根 CA 的根 CA 證書時吊銷處於離線狀態

  • June 14, 2018

我一直在使用 Linux(Debian 9 with OpenSSL)根證書頒發機構和 Windows server 2012 R2 從屬證書頒發機構設置兩層 PKI 的實驗室。

當我嘗試在 Windows 伺服器上安裝已簽名的從屬證書時,我首先收到一條警告,指出無法驗證根 ca。我點擊“確定”以忽略 ADCS 未啟動之後的警告。當我手動啟動 ADCS 時,我收到錯誤消息;

“由於吊銷伺服器離線,吊銷功能無法檢查吊銷”

我認為問題在於我如何指向 Linux 根 CA 上的 CRL 分發點和 AIA,或者我如何在 Windows 伺服器上設置 IIS(可能兩者兼有)。

設置

  • rootca:Linux Debain 9 作為根證書頒發機構
  • testpki:Windows Server 2012 R2 作為從屬證書頒發機構/IIS
  • dc0:Windows Server 2012 R2 作為域控制器

Linux

我在 rootca 上設置了一個自定義 OpenSSL 配置文件,添加了這些行;

authorityInfoAccess = caIssuer;URI:http://testpki.example.com/crld/root.cer
crlDistributionPoints = URI:http://testpki.example.com/crld/root.crl

到配置文件的 v3_ca 和 v3_intermediate_ca 部分。

視窗

我為“testpki.example.com”設置了一個 DNS 記錄,用於在 dc0 上進行名稱解析。

Linux 框中的根證書被導入到 testpki 上的證書頒發機構管理單元中的受信任的根證書頒發機構目錄中。

在 testpki 上安裝 IIS 後,我使用別名 crld 設置了一個虛擬目錄,並將根證書和 CRL 複製到該目錄。

輸入 URL“testpki.example.com/crld”時,我能夠連接到 IIS,但如果我輸入 URL“testpki.example.com/crld/root.cer”,即使“root. cer”顯示在“../crld”頁面索引中。

其餘的設置是按照本指南完成的:Using openssl as a root ca for windows

任何見解將不勝感激。

-謝謝

certutil -verify -urlfetch ..\subca.cer 輸出

發行人:
CN=範例-TESTPKI-CA
名稱雜湊(sha1):e6c59398cbed5b994ff33c6e6380312fe2ad9a4a
名稱雜湊(md5):b0f8c7beb298a3ba230f71fbc927b386
學科:
CN=example-TESTPKI-CA-Xchg
名稱雜湊(sha1):86f6ae3e12a21350005b9d70b1229ecb1b78dd0b
名稱雜湊(md5):dd1324e864c4233d2f87e9c0c342dfcd
證書序列號:4b0000000478b909e350cb7280000000000004

dwFlags = CA_VERIFY_FLAGS_CONSOLE_TRACE (0x20000000)
dwFlags = CA_VERIFY_FLAGS_DUMP_CHAIN (0x40000000)
ChainFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT (0x40000000)
HCCE_LOCAL_MACHINE
CERT_CHAIN_POLICY_BASE
-------- CERT_CHAIN_CONTEXT --------
ChainContext.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
ChainContext.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
ChainContext.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)

SimpleChain.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
SimpleChain.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
SimpleChain.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)

CertContext[0][0]:dwInfoStatus=102 dwErrorStatus=0
發行人:CN=example-TESTPKI-CA
NotBefore: 2018 年 2 月 7 日下午 3:37
之後:2018 年 2 月 14 日下午 3:47
主題:CN=example-TESTPKI-CA-Xchg
序列號:4b0000000478b909e350cb7280000000000004
模板:CAExchange
a13e6c1703f95408910d21dc380818b23c76e79f
Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
---------------- 證書 AIA ----------------
錯誤頒發者“證書(0)”時間:0
[0.0] ldap:///CN=example-TESTPKI-CA,CN=AIA,CN=Public%20Key%20Services,
服務,CN=配置,DC=example,DC=com?cACertificate?base?objectCla
認證機構

吊銷檢查失敗“證書(1)”時間:0
[0.1] ldap:///CN=example-TESTPKI-CA,CN=AIA,CN=Public%20Key%20Services,
服務,CN=配置,DC=example,DC=com?cACertificate?base?objectCla
認證機構

---------------- 證書 CDP ----------------
已驗證“基本 CRL (02)”時間:0
[0.0] ldap:///CN=example,CN=com,CN=CDP,CN=Public%20Key%
ervices,CN=Services,CN=Configuration,DC=example,DC=com?certificateRevoca
nList?base?objectClass=cRLDistributionPoint

驗證“Delta CRL (02)”時間:0
[0.0.0] ldap:///CN=example-TESTPKI-CA,CN=testpki,CN=CDP,CN=Public%20Ke
0Services,CN=Services,CN=Configuration,DC=example,DC=com?deltaRevocation
t?base?objectClass=cRLDistributionPoint

---------------- 基礎 CRL CDP ----------------
OK "Delta CRL (02)" 時間: 0
[0.0] ldap:///CN=example-TESTPKI-CA,CN=testpki,CN=CDP,CN=Public%20Key%
服務,CN=Services,CN=Configuration,DC=example,DC=com?deltaRevocationLi
base?objectClass=cRLDistributionPoint

---------------- 證書 OCSP ----------------
沒有網址“無”時間:0
--------------------------------
CRL 02:
發行人:CN=example-TESTPKI-CA
本次更新:2018 年 2 月 7 日下午 3:52
下一次更新:2/15/2018 4:12 AM
7f6e7f6f4d13cd98164e53d35ce406e2dde3dd3a
三角洲 CRL 02:
發行人:CN=example-TESTPKI-CA
本次更新:2018 年 2 月 7 日下午 3:52
NextUpdate: 2/9/2018 4:12 AM
07de3204292fbc0ab4a42cfef02b6b4837a78529
應用程序[0] = 1.3.6.1.4.1.311.21.5 私鑰存檔

CertContext[0][1]:dwInfoStatus=102 dwErrorStatus=1000040
發行人:CN=rootca
NotBefore: 2018 年 2 月 7 日下午 1:17
之後:2023 年 2 月 6 日下午 1:17
主題:CN=example-TESTPKI-CA
序列號:1000
d74fdf7e86c80171e91dd72a16a1f8f72c9666a3
Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
Element.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
Element.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)
---------------- 證書 AIA ----------------
“友邦保險”失敗時間:0
檢索 URL 時出錯:不支持該請求。0x80070032 (WIN32: 50
ROR_NOT_SUPPORTED)
testpki.example.com/crld/root.cer

---------------- 證書 CDP ----------------
失敗的“CDP”時間:0
檢索 URL 時出錯:未找到 (404)。0x80190194 (-2145844844 HTTP_E_STA
_未找到)
http://testpki.example.com/crld/rootca.crl

---------------- 證書 OCSP ----------------
沒有網址“無”時間:0
--------------------------------

CertContext[0][2]:dwInfoStatus=10a dwErrorStatus=0
發行人:CN=rootca
NotBefore: 2/7/2018 12:54 PM
之後:2023 年 2 月 6 日下午 12:54
主題:CN=rootca
序列號:94cb4df27b1cb5a3
99a30cec9d5dbc21afe5e4b679e5db844f7a9dd0
Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
Element.dwInfoStatus = CERT_TRUST_IS_SELF_SIGNED (0x8)
Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
---------------- 證書 AIA ----------------
“友邦保險”失敗時間:0
檢索 URL 時出錯:不支持該請求。0x80070032 (WIN32: 50
ROR_NOT_SUPPORTED)
testpki.example.com/crld/root.cer

---------------- 證書 CDP ----------------
失敗的“CDP”時間:0
檢索 URL 時出錯:未找到 (404)。0x80190194 (-2145844844 HTTP_E_STA
_未找到)
http://testpki.example/crld/rootca.crl

---------------- 證書 OCSP ----------------
沒有網址“無”時間:0
--------------------------------

排除葉子證書:
a7b797168cbc0ff36636479d8cd2de6f2b184355
全鏈條:
7e1caac607a7a5b087b491accf72df2f8d4cf06e
發行人:CN=example-TESTPKI-CA
NotBefore: 2018 年 2 月 7 日下午 3:37
之後:2018 年 2 月 14 日下午 3:47
主題:CN=example-TESTPKI-CA-Xchg
序列號:4b0000000478b909e350cb7280000000000004
模板:CAExchange
a13e6c1703f95408910d21dc380818b23c76e79f
吊銷功能無法檢查吊銷,因為吊銷
rver 離線。0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
------------------------------------
已跳過吊銷檢查 -- 伺服器離線
葉證書吊銷檢查通過
CertUtil: -verify 命令成功完成。

好的,現在好多了。你在這裡有很多問題:

 Wrong Issuer "Certificate (0)" Time: 0
   [0.0] ldap:///CN=example-TESTPKI-CA,CN=AIA,CN=Public%20Key%20Services,
Services,CN=Configuration,DC=example,DC=com?cACertificate?base?objectCla
certificationAuthority

此錯誤表明在 Active Directory 中發布了錯誤的 subCA 證書。您必須通過執行以下命令將 subCA 證書重新發佈到 Active Directory:

certutil -dspublish -f SubCA.cer SubCA

現在您的根 CA:

 Failed "AIA" Time: 0
   Error retrieving URL: The request is not supported. 0x80070032 (WIN32: 50
ROR_NOT_SUPPORTED)
   testpki.example.com/crld/root.cer

您在 OpenSSL 配置中輸入錯誤的 URL。缺少協議前綴。您需要添加http://前綴並重新頒發 SubCA 證書。

 Failed "CDP" Time: 0
   Error retrieving URL: Not found (404). 0x80190194 (-2145844844 HTTP_E_STA
_NOT_FOUND)
   http://testpki.example.com/crld/rootca.crl

這個 URL 看起來是正確的(至少,它包含協議前綴),CA 伺服器可以訪問 web 伺服器,但是 web 伺服器響應 404,表明請求的路徑沒有任何內容。


TBH,你的設置一點都不好。您有太多問題,因為(看起來)沒有計劃設計或沒有驗證計劃。

除了明確的問題之外,您的根 CA 本身還包括冗餘的 CRL 分發點 (CDP) 和授權資訊訪問 (AIA) 擴展。您應該從根證書中刪除它們。不使用 AIA 是為了避免路徑建構期間的循環。不使用根證書中的 C​​DP,因為雞蛋問題,您無法撤銷根(自簽名)證書。但它們(CDP 和 AIA 擴展)必須包含在頒發的證書(即從屬 CA)中。

我建議您回滾您在這裡所做的一切並從頭開始。

首先,您需要設計您的解決方案,規劃各個方面。

  1. 辨識將使用證書的應用程序。
  2. 描述證書要求並規劃證書範圍。
  3. 基於$$ 2 $$確定您將使用的證書模板及其配置。
  4. 設計 CA 放置圖並創建證書流程圖(證書註冊、客戶端應用程序驗證)。
  5. 設計災難恢復計劃,其中將包括備份和恢復計劃。

否則,您的解決方案將一文不值。即使這是測試部署,您仍然必須通過所有這些步驟。

正確規劃 CRT/CRL 發布和下載 URL。您需要檢查兩次,因為如果不重新部署所有證書就無法輕鬆解決這些問題。關於這個主題的一般建議:

  1. 不要在 CDP/AIA 中使用 LDAP URL。考慮僅使用 HTTP。
  2. 使用專用 Web 伺服器來提供 CRT/CRL 文件(不要將 SubCA 與 Web 伺服器角色結合使用)。
  3. 不要在根證書中使用 CDP/AIA 擴展
  4. 確保所有客戶端(將使用您的證書)都可以訪問 CRT/CRL 文件

關於 CDP/AIA 擴展計劃,我建議查看我的部落格文章:設計 CRL 分發點和授權資訊訪問位置。雖然這篇文章是針對 Microsoft CA 編寫的,但相同的原則適用於任何其他 CA 實現,因為這些是最佳實踐。

您可能想嘗試按照以下方式禁用 CRL 檢查:

https://social.technet.microsoft.com/wiki/contents/articles/964.certificate-revocation-list-crl-verification-an-application-choice.aspx

certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE

引用自:https://serverfault.com/questions/896178