当前位置: 首页 > 知识库问答 >
问题:

我如何在自定义绑定中使用RSA-SHA512作为DefaultalgorithorithmSuite中的签名算法?

冯阳成
2023-03-14

我正在按照以下标准签署XML:签名算法:http://www.w3.org/2001/04/xmldsig-more#rsa-sha512摘要算法:http://www.w3.org/2001/04/xmlenc#sha512规范化算法:http://www.w3.org/2001/10/xml-exc-c14n#

但我未能在WCF中找到对SHA512的支持。有办法解决吗?

下面是我的代码:

<customBinding>
    <binding name="McBinding">
         <textMessageEncoding messageVersion="Soap11" />
        <security authenticationMode="MutualCertificate" includeTimestamp="false" defaultAlgorithmSuite="??"
            messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
            <secureConversationBootstrap />
        </security>
        <httpsTransport />
    </binding>

共有1个答案

漆雕奇
2023-03-14

我遇到的问题是不支持RSA-SHA512签名算法。它可以通过使用自定义签名算法来实现。然后将其添加到自定义绑定中的默认签名算法中。

 public class MyCustomAlgorithmSuite : SecurityAlgorithmSuite { }

还可以为此创建签名:

public class RsaPkCs1Sha512SignatureDescription : SignatureDescription
{}

然后将其添加到:

CryptoConfig.AddAlgorithm(typeof(RsaPkCs1Sha512SignatureDescription),
            "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512");

但是,我们在签署BinarySecurity令牌时遇到了一个问题。可以通过添加以下内容对其进行签名:

assymetricKey.EndpointSupportingTokenParameters.Signed.Add(new X509SecurityTokenParameters());

但是,这将创建一个新的已签名二进制安全令牌,您将得到两个BST。解决办法是:

            assymetricKey.InitiatorTokenParameters = new System.ServiceModel.Security.Tokens.X509SecurityTokenParameters { InclusionMode = SecurityTokenInclusionMode.Never};
        assymetricKey.RecipientTokenParameters = new System.ServiceModel.Security.Tokens.X509SecurityTokenParameters { InclusionMode = SecurityTokenInclusionMode.Never};

这搞乱了您的SignedInfo失去了对BST的引用,我们被卡住了。

不管怎样,我们最终没有使用WCF功能,而是使用了:

SignedXML class.

有关如何使用它的参考,请参阅以下链接:https://gist.github.com/luizvaz/43CCBD85B16B6802218B50B6D34C26DE

使用SHA256 SignedXml计算机签名

signedXml.SigningKey = RSACertificateExtensions.GetRSAPrivateKey(cert);

此外,如果要将前缀添加到作为ds的签名中,则需要从signedinfo中删除引用,重新计算签名并将其添加回来。

生成具有特定命名空间前缀(“ds:”)的数字签名

我希望这有助于有类似的问题。

 类似资料:
  • 但是,当我收到SignatureMethod RSA-SHA512(http://www.w3.org/2001/04/xmldsig-more#RSA-SHA512)时,CheckSignature()会出现CryptograhicException中断:无法为提供的签名算法创建SignatureDescription。 看起来CheckSignature()无法验证RSA-SHA512签名。

  • 问题内容: 我有pkcs8_rsa_private_key文件,它是由openssl从rsa_private_key.pem文件生成的。 我需要使用python中的私钥进行签名,并使用以下Java代码进行相同的签名。 问题答案: PKCS#8定义了一种编码和传输秘密密钥的方法,并且它不是特定于OpenSSL的。PKCS#1定义了一种使用RSA密钥的方法(无论它如何以PKCS#8加载到您的应用程序中

  • 我有一个FXML文档,其中包含我的JavaFX项目的视觉基础,我想通过使用一个窗格来创建一个自己的Topbar(X、最小值/最大值等等)。但我的程序将有多个页面(场景),为了保持代码干净,我想将自定义Topbar作为一个单独的类(有点像组件对象)。我只是不知道该如何在我使用的FXML基础上实现这个类(我使用的是Scene Builder)。

  • 问题内容: 如何仅在Swift中为我的应用制作自定义键盘?我不希望人们去设置然后添加键盘。我希望他们能够在我的应用程序上立即使用它。无需额外的工作。 如何在Swift中实现呢? 许多链接只谈论在设置中添加新键盘。我不要 我对UI还是很陌生,请给我详细说明。 问题答案: 用于文本输入的UITextField和UITextView类都具有inputView属性。默认情况下,此属性为nil,但如果为它提

  • 我正在尝试将管道分隔字符串转换为xml,这很好。但是,我没有得到我在下面展示的实际输出。在我的输出中,父标记与包名一起生成,它也没有生成我想要的名称空间。你能帮我把平面文件转换成我期望的精确输出吗。 CamelConfig。JAVA ConverterRoute。JAVA 来源txt Test.java 输出 测验xml 预期产量 测验xml

  • 我有一个简单的签名方法来签署工作正常的PDF文档,它使用显示名称、位置、日期和原因的默认戳记来签署文档。 现在我的经理问我是否可以在上面再添加一个字段。让我们假设这是一个“电子邮件”字段,因为我还没有被告知他们想要什么。 我试着搜索并应用我找到的一些东西,但没有任何效果。 此外,有人问我是否可以删除/隐藏这4个默认字段的标签(日期、原因等...),我无法管理这样做,也找不到任何关于它的东西,我不知