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

我正在编写一个

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签名转换?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值