我正在尝试发送请求:
ActiveXObject("WinHttp.WinHttpRequest.5.1")
然而,这需要客户端证书才能这样做(我们已提供)。
在 PHP cURL 中测试后,我可以这样做:
curl_setopt($SOAP, CURLOPT_SSLCERT,$filepathtocertificate);
效果很好。但是我必须使用运行 asp(javascript) 的 IIS 并指向运行脚本的机器的证书存储:
SetClientCertificate("LOCAL_MACHINE\\Personal\\Certificate subject");
用于我们的实际部署。 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
查看证书存储并使用同一文件夹中的其他脚本显示它们确实存在,但主题如下:
C=US, O=Organisation NAme, OU="Another Organisation Name, Inc.", CN=Organisation Name Root
或类似的。
对于需要提供哪些参数 SetClientCertificate 以选择和发送证书库中的证书的任何建议,我们将不胜感激。
最佳答案
我在同一问题上遇到了很多麻烦 - 使用脚本语言的 winhttp 5.1 在发送前设置客户端证书。
我使用带有证书管理单元的 mmc 将证书导入 CURRENT_USER\Personal - 但 Winhttp SetClientCertificate 似乎没有做任何事情,我也无法获取任何错误代码或消息,所以它是反复试验和错误的情况 - SetClientCertificate 字符串应该类似于“Location\store\subject”,例如“CURRENT_USER\Personal\My Certificate”(或者\\如果您的语言需要\进行转义)-最后一部分是 ' subject' 这不是应该的那么清楚。在 MMC 下,主题被分解为许多元素。
我最终通过删除 location 和 store 使其工作 - 它们是默认值,所以我可能很幸运 - 并仅提供主题字段 - 我用于主题字段的值是“CN = “在主题下(当证书在 mmc 下打开时)-但这(可能是巧合)也是主要 mmc 证书列表上“颁发给”列中的值。在我的例子中它起作用了——很明显,如果有一个证书的这两个值不同,那么你需要尝试每一个。
希望这对遇到类似问题的人有所帮助。
关于ssl - SetClientCertificate 使用什么主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531400/