SetClientCertificate 使用什么主题?

Gav*_*vin 5 ssl certificate ssl-certificate asp-classic activexobject

我正在尝试发送一个请求:

ActiveXObject("WinHttp.WinHttpRequest.5.1")
Run Code Online (Sandbox Code Playgroud)

但是,这需要客户证书才能这样做(我们已提供)。

在 PHP cURL 中测试后,我可以这样做:

curl_setopt($SOAP, CURLOPT_SSLCERT,$filepathtocertificate);
Run Code Online (Sandbox Code Playgroud)

哪个工作正常。但是,我必须使用 IIS 运行 asp(javascript) 并指向运行脚本的机器的证书存储:

 SetClientCertificate("LOCAL_MACHINE\\Personal\\Certificate subject");
Run Code Online (Sandbox Code Playgroud)

对于我们的实际部署。MS 文档 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa384055(v=vs.85).aspx ) 建议上述路径必须说明证书的“主题” ,但是证书似乎有几个主题,并且没有几个或所有这些主题的组合似乎产生任何结果,我什至在发送请求之前就遇到了以下错误:

WinHttp.WinHttpRequest error '80072f0c'

A certificate is required to complete client authentication
Run Code Online (Sandbox Code Playgroud)

查看证书存储并使用同一文件夹中的其他脚本显示它们肯定存在,但具有以下主题:

C=US, O=Organisation NAme, OU="Another Organisation Name, Inc.", CN=Organisation Name Root
Run Code Online (Sandbox Code Playgroud)

或者类似的。

关于在证书存储中选择和发送证书需要提供哪些参数 SetClientCertificate 的任何建议将不胜感激。

小智 4

我在同样的问题上遇到了很多麻烦 - 使用脚本语言中的 winhttp 5.1 在发送之前设置客户端证书。

我使用 mmc 和证书管理单元将证书导入 CURRENT_USER \ Personal - 但 Winhttp SetClientCertificate 似乎没有做任何事情,我也无法获取任何错误代码或消息,所以这是一种情况反复试验和错误 - SetClientCertificate 字符串应该类似于“Location\store\subject”,例如“CURRENT_USER\Personal\My Certificate”(或者 \ \,如果您的语言需要转义 \) - 最后部分是“subject”,其中并不像应有的那么清晰。在 MMC 下,主题被分解为许多元素。

我最终通过删除位置和商店来使其工作 - 它们是默认值,所以我可能很幸运 - 并仅提供主题字段 - 我用于主题字段的值是主题下“CN =”行中的值(当证书在 mmc 下打开时) - 但这(可能是巧合)也是主 mmc 证书列表上“颁发给”列中的值。就我而言,它有效 - 显然,如果有一个证书的这两个值不同,那么您需要尝试每个值。

如果有人遇到同样的问题,希望这会有所帮助。