ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

从DER ASN.1到XMLDSIG P1363的PHP DSA签名转换

2019-06-26 04:19:34  阅读:334  来源: 互联网

标签:php openssl saml der xml-dsig


我正在编写一个PHP应用程序(充当SAML IdP),它试图通过SAML响应服务器进行登录(充当SAML SP.我目前停在服务器拒绝请求(我只是得到500)错误的请求).

我已经编写了一个测试应用程序(在Java / openSAML中 – 我很确定服务器正在使用它),并且可以看到问题是SAML SignatureValidator验证生成

org.apache.xml.security.signature.XMLSignatureException: Invalid XMLDSIG format of DSA signature

查看SAML SignatureValidator code我可以看到它检查XMLDISG签名是否正好是40字节长(P1363格式?) – 而生成的签名长度为46-48字节(DER ASN.1格式?).

签名由PHP openssl_sign生成,如下所示.

openssl_sign($canonicalized_signedinfo,
                  $signature,
                  $private_key,
                  OPENSSL_ALGO_DSS1))

示例签名(为清楚起见,显示为二进制到十六进制)如下所示.这是46个字节,但我注意到它从46到48字节不等(取决于随机密钥?).

302c02146e74afeddb0fafa646757d73b43bca688a12ffc5021473dc0ca572352c922b80abd0662965e7b866416d

我可以使用PHP openssl_verify成功验证此签名,如下所示.

openssl_verify ($canonicalized_signedinfo, 
                 $signature , 
                 $public_key,
                 OPENSSL_ALGO_DSS1))

但是在我的测试应用程序中,当我执行SignatureValidator验证时(如下所示),我得到XMLSignatureException:DSA签名异常的XMLDSIG格式无效.

  BasicCredential credential = new BasicCredential();
  credential.setPublicKey(publicKey);
  credential.setUsageType(UsageType.SIGNING);
  SignatureValidator sigValidator = new SignatureValidator(credential);
  sigValidator.validate(signature);

有谁知道如何从PHP openssl_sign生成的46-48 DER ASN.1格式到openSAML期望的40字节P1363格式进行PHP签名转换?

解决方法:

resource from code project有关于如何使用代码示例将ASN.1格式转换为P1363的说明.编写Java验证方法可能很有用.

我建议您使用此C代码从PHP生成符合DSIG的签名:http://xmlsig.sourceforge.net/

顺便说一下,它听起来比简单地生成签名并验证它更复杂.可能感兴趣:XMLBlackbox

标签:php,openssl,saml,der,xml-dsig
来源: https://codeday.me/bug/20190626/1289964.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有