如何从.p12文件生成BinarySecurityToken(X509PKIPathv1)

时间:2018-04-18 20:43:25

标签: c# ws-security

我正在尝试从C#客户端使用Java Web服务。该服务需要值为BinarySecurityToken的{​​{1}}元素。

X509PKIPathv1

WCF does not support X509PKIPathv1值类型以来,我手动生成SOAP消息,使用<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> 类对其进行签名,使用SignedXml对其进行加密并使用{{1}发送它}类。至于EncryptedXml元素的值,我使用SoapUI中生成的相同证书的值,它可以工作。

但是,我希望能够以编程方式从.p12文件生成此值,并且每次证书过期时都不必再次从SoapUI粘贴它。

WS-Security documentation有点模糊,所以我不知道如何去做。这是它提供的有关此令牌类型的所有信息:

  

#X509PKIPathv1 :打包在PKIPath中的X.509证书的有序列表

如何在C#中从.p12文件生成此值? SoapUI以某种方式做到了。

1 个答案:

答案 0 :(得分:1)

因此,这可能无法完全解决您的问题,但可能会有所帮助。

此:

  

#X509PKIPathv1 :打包在PKIPath中的X.509证书的有序列表

means是用于签名消息的asn1序列或证书链。您甚至可以here看到它。

提供一些上下文asn1是一种独立于所使用的计算机表示数据的方法。这些数据是二进制的,并且不可读,因此您将其转换为bade 64,这就是您在该字段中看到的。

我不确定您的.p12文件的确切内容是什么,但是至少我认为它具有您用来签名消息的私钥证书,甚至可能是链,直到得到公众信任为止证书或CA

我主要是C ++开发人员,我知道openssl提供了类似C的api来读取证书manipulate the underlying asn1结构并将其输出为字符串。

很抱歉,没有提供更多详细信息或代码示例