我正在使用 SOAP 请求调用第三方 Web 服务。此服务要求我对 SOAP 请求进行数字签名。关于如何购买用于签署数字有效载荷的 X.509 证书问题,我从 Entrust 购买了电子邮件签名证书。
我从 Entrust 以 格式 获得了私钥.p12
。我使用 Windows 证书管理器从中提取公钥。我将这个公钥交给了我的 Web 服务提供商。我无法.p12
在我的程序中直接以 格式 使用私钥,因此我使用 openssl 将其转换为.pem
格式。严格来说,我使用了这种命令:openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes
。
我使用转换后的私钥、公钥和密码短语为我的 SOAP 请求标头创建签名,但是,当我发送请求时,服务给我一个错误“安全令牌验证失败”。我看不到任何具体错误,因为我只能在错误中看到证书数据。
我做错什么了吗?
编辑:也许问题与我的证书有关。我发现我的证书的哈希算法是 SHA-256,尽管我的 SOAP 客户端和第三方服务提供商仅支持 SHA-1。