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

标签 c# ws-security

我正在尝试从 C# 客户端使用 Java Web 服务。该服务需要值类型为 X509PKIPathv1BinarySecurityToken 元素。

<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/

相关文章:

java - 使用安全 header 中的随机数从 java 调用 soap webservice

java - 使用 JAVA 的安全 Web 服务

Java XML WS-安全签名; X.509 token 配置文件;添加安全 token 引用

在 Mule ESB 中使用 Windows 凭证的 CXF 端点

C# - 在一些计算之后从另一个构造函数调用构造函数

c# - 无法反序列化当前的 JSON 数组(例如 [1,2,3])

c# - 数据表 : is deleting old DataRows before inserting new safe?

c# - 以列表的形式访问所有可用的 ViewComponents

c# - Selenium - Visual Studios- C# - 所有(chrome、firefox 和 internet explorer)网络驱动程序无法启动驱动程序服务

wcf - 带有 WCF 客户端的 Java JAX-WS 服务