首页 > 解决方案 > 使用 ICertRequest 从 Microsoft 证书服务请求 X509 证书

问题描述

我的应用程序最近更改为使用客户端-服务器模型。

现在我需要能够从远程服务器而不是本地网络上的服务器请求证书。ICertRequest 指定它可以接受:

注册服务器的 HTTPS URL 或 ComputerName/CAName 的形式

后者之前使用没有任何问题,但现在我希望它使用 HTTPS 但不确定用作 url 的内容。我能够通过以下方式访问网页:

https://example.com/certsrv

但是,如果我将此字符串用作 ICertRequest 的strConfig,它会出现:

System.Runtime.InteropServices.COMException: 'CCertRequest::Submit: The input data was not in the expected format or did not have the expected value. 0x803d0000 (-2143485952)'

请求没有以任何方式改变,所以我希望它与 URL 相关。我也试过https://example.com/certsrv/certrqus.asp没有任何运气

标签: c#x509certificatex509

解决方案


Microsoft ADCS 中有两个 Web 功能:

  1. 旧版注册网页(您正在尝试使用)。
  2. 注册使用 HTTP/SOAP 传输的 Web 服务。

注册服务器的 HTTPS URL

该消息指的是后一个URI。您可能需要在服务器端(CA 所在的位置)设置注册 Web 服务,并使用公开的端点与 CA 进行通信。Web 服务由两个服务组成:策略和注册。

政策沟通:

client <---HTTP/SOAP---> XCEP <---RPC/DCOM---> Policy Storage

客户端首先与 XCEP 通信以加载注册策略和证书注册策略端点。与 CA 没有直接通信,XCEP 仅存储策略、客户端可用的证书模板和注册 Web 服务的 URI。

client <---HTTP/SOAP---> WSTEP <---RPC/DCOM---> MS ADCS

策略(在第一步中获得)包含向策略提供者(XCEP 服务器)注册的注册服务的 URI。客户端使用一个或多个端点来执行证书注册任务。

参考:Active Directory 证书服务中的证书注册 Web 服务


推荐阅读