憑證服務拒絕處理非常長的憑證要求。
憑證授權單位 (CA) 存取控制權限確保獲得授權的元件和使用者可以完成所需的工作。存取控制錯誤可以識別與使用權限不足或不適當相關的潛在問題。
嘗試提交長的憑證要求
非常長的憑證要求意味著嘗試啟動阻斷服務攻擊。
來源必須在事件記錄檔訊息中確認。您還必須檢閱所有失敗憑證要求的相關訊息,以偵測是否存在其他異常的憑證要求。
若要解決此潛在問題:
檢閱失敗的憑證要求,判斷失敗的要求是否來自已知來源或受信任來源。
如果要求遭到錯誤拒絕,請修改登錄中的 MaxIncomingMessageSize 設定,以允許較大的憑證要求。
如果要求未遭到錯誤拒絕,請確認要求來源,防範從該來源提交要求。
若要執行這些程序,您必須有本機 Administrators 的成員資格,或者必須已被委派適當的權限。
檢閱失敗的憑證要求
若要檢閱失敗的憑證要求:
在主控 CA 的電腦上,按一下 [開始],指向 [系統管理工具],然後按一下 [憑證授權單位]。
檢查 [失敗的要求] 資料夾中所包含的失敗要求,並判斷該要求是否來自受信任的來源。
您也可以開啟命令提示字元視窗並執行下面的命令:certutil -view LogFail。
如果要求來自合法來源,但卻遭到拒絕,這是因為該要求過大所致,您可以使用下面的程序增加訊息大小的上限,或讓憑證要求者提交新憑證要求。
修改訊息大小上限
預設的訊息大小上限設定為 10,000 個位元組。如果您在上述程序中檢閱失敗的憑證要求期間,偵測到合法憑證要求因超過此值而被拒絕,請考慮將此登錄設定增加到可以讓類似要求成功處理的值。
若要修改訊息大小上限:
注意:不當編輯登錄可能會對系統造成嚴重損害。在變更登錄前,您應先備份所有重要的資料。
在主控 CA 的電腦上,按一下 [開始],輸入 cmd 並按 ENTER。
輸入 certutil -setreg CA\MaxIncomingMessageSize <bytes>,然後按 ENTER。
若要確認 CA 登入內容正確:
在主控 CA 的電腦上,按一下 [開始],指向 [系統管理工具],然後按一下 [服務]。
確認文字 [已啟動] 出現在 Active Directory 憑證服務] 的 [狀態] 中。
Target | Microsoft.Windows.CertificateServices.CARole.2016 | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 60 | ||
Event Source | Microsoft-Windows-CertificationAuthority | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | High | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.Windows.EventProvider | Default |
Alert | WriteAction | System.Health.GenerateAlert | Default |
WriteToCertSvcEvents | WriteAction | Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher | Default |
WriteToDB | WriteAction | Microsoft.SystemCenter.CollectEvent | Default |
<Rule ID="Microsoft.Windows.CertificateServices.CARole.2016.CertSvcEvents.60" Enabled="true" Target="CSDisc!Microsoft.Windows.CertificateServices.CARole.2016" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">60</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Microsoft-Windows-CertificationAuthority</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WriteToDB" TypeID="SC!Microsoft.SystemCenter.CollectEvent"/>
<WriteAction ID="WriteToCertSvcEvents" TypeID="Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher"/>
<WriteAction ID="Alert" TypeID="Health!System.Health.GenerateAlert">
<Priority>2</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="AlertMessageIDf35538bb2517423d95f7d32e661b5ffa"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/PublisherName$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>