我正在尝试从 C# 客户端使用 Java Web 服务。该服务需要值类型为 X509PKIPathv1
的 BinarySecurityToken
元素。
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1">
MIIH......
</wsse:BinarySecurityToken>
自 WCF does not support X509PKIPathv1值类型,我手动生成 SOAP 消息,使用 SignedXml
类对其进行签名,使用 EncryptedXml
对其进行加密并使用 WebClient
发送它> 类。至于 BinarySecurityToken
元素的值,我使用了在 SoapUI 中为同一个证书生成的值,并且有效。
但是,我希望能够从 .p12 文件以编程方式生成此值,而不必在每次证书过期时再次从 SoapUI 粘贴它。
WS-Security documentation有点含糊,所以我不确定该怎么做。这是它提供的有关此 token 类型的所有信息:
#X509PKIPathv1: An ordered list of X.509 certificates packaged in a PKIPath
如何在 C# 中从 .p12 文件生成这个值? SoapUI 以某种方式做到了这一点。
最佳答案
所以这可能无法完全解决您的问题,但它可能会对您有所帮助。
这个:
#X509PKIPathv1: An ordered list of X.509 certificates packaged in a PKIPath
means 是您用来签署消息的 asn1 序列或证书链。你甚至可以看到它here .
给出一些上下文 asn1是以独立于您正在使用的机器的方式表示数据的方式。此数据是二进制的,人类不可读,因此您将其转换为 64 位,这就是您在该字段中看到的内容。
我不完全确定你的 .p12
文件的确切内容是什么,但至少我假设它有你用来签署消息的私钥证书,也许还有链直到获得公开信任的证书或 CA .
我主要是一名 C++ 开发人员,我知道 openssl 提供了一个类似于 C 的 api 来读取证书 manipulate the underlying asn1结构并将其输出为字符串。
很抱歉没有提供更详细的信息或代码示例
关于c# - 如何从 .p12 文件生成 BinarySecurityToken (X509PKIPathv1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908716/