Rest 从DSS中的getDataToSign方法获取signatureValue

Rest 从DSS中的getDataToSign方法获取signatureValue,rest,digital-signature,electronic-signature,Rest,Digital Signature,Electronic Signature,我使用SD-DSS开源解决方案对文档进行数字签名。我查看了页面,但不确定如何获取示例请求中的签名值。在我解释时,我必须使用getDataToSign的输出,摘要为signatureValue,但在sampleREST项目中,这些值之间不匹配 getDataToSign的输出为: {{ { "bytes" : "MYIBETAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xODAzMjYwODEyMDlaMC0GCSqGSIb3D

我使用
SD-DSS
开源解决方案对文档进行数字签名。我查看了页面,但不确定如何获取示例请求中的签名值。在我解释时,我必须使用
getDataToSign
的输出,摘要为
signatureValue
,但在sample
REST
项目中,这些值之间不匹配

getDataToSign
的输出为:

{{

{ "bytes" : "MYIBETAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xODAzMjYwODEyMDlaMC0GCSqGSIb3DQEJNDEgMB4wDQYJYIZIAWUDBAIBBQChDQYJKoZIhvcNAQELBQAwLwYJKoZIhvcNAQkEMSIEIBhfjbMicf4l9WGm/JOLLiZDBuwwTtpRgAfRdkgmOBlpMHcGCyqGSIb3DQEJEAIvMWgwZjBkMGIEIALz68oBYydCU7yAnSdJjdQbsDFtfmsGaWARXeFVWJ2cMD4wNKQyMDAxGzAZBgNVBAMMElJvb3RTZWxmU2lnbmVkRmFrZTERMA8GA1UECgwIRFNTLXRlc3QCBi7WFNe7Vw==" }
}}
signDocument
请求中的值:

{{ "signatureValue" : { "algorithm" : "RSA_SHA256", "value" : "AQIDBA==" },}}
更新:

我使用这些请求:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getDataToSign xmlns:ns2="http://signature.dss.esig.europa.eu/">
<dataToSignDTO>
<parameters>
<BLevelParams>
<trustAnchorBPPolicy>true</trustAnchorBPPolicy>
<signingDate>2019-01-01T01:01:01.464Z</signingDate>
</BLevelParams>
<digestAlgorithm>SHA256</digestAlgorithm>
<encryptionAlgorithm>RSA</encryptionAlgorithm>
<signatureLevel>PAdES_BASELINE_B</signatureLevel>
<signaturePackaging>ENVELOPED</signaturePackaging>
<signingCertificate>
<encodedCertificate>${#cert}</encodedCertificate>
</signingCertificate>
</parameters>
<toSignDocument>
<bytes><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="ref1"/></bytes>
</toSignDocument>
</dataToSignDTO>
</ns2:getDataToSign>
</soap:Body>
</soap:Envelope>


<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:signDocument xmlns:ns2="http://signature.dss.esig.europa.eu/">
<signDocumentDTO>
<parameters>
<BLevelParams>
<trustAnchorBPPolicy>true</trustAnchorBPPolicy>
<signingDate>2019-01-01T01:01:01.464Z</signingDate>
</BLevelParams>
<digestAlgorithm>SHA256</digestAlgorithm>
<signatureLevel>PAdES_BASELINE_B</signatureLevel>
<signaturePackaging>ENVELOPED</signaturePackaging>
<signingCertificate>
<encodedCertificate>${#cert}</encodedCertificate>
</signingCertificate>
</parameters>
<signatureValue>
<algorithm>RSA_SHA256</algorithm>
<value>${#datatosign}</value>
</signatureValue>
<toSignDocument>
<bytes><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="ref1"/></bytes>
<name>dsstest</name>
</toSignDocument>
</signDocumentDTO>
</ns2:signDocument>
</soap:Body>
</soap:Envelope>

DSS在
getDataToSign
中向您提供要使用与您发送的证书对应的私钥进行签名的摘要

您必须使用指定的算法对该值进行数字签名,并将结果发送到
signDocument
。在您的案例中,RSA PKCS#1与SHA256

伪码

var digestToSign = getDataToSign(document, params)
var signatureValue = PKCS#1_v1.5(privateKey, digestToSign, SHA256)
var finalDocument = signDocument(signatureValue)

在此之后,DSS将构建最终的签名文档。

我刚刚使用p12文件和getDataToSign方法base64编码输出执行了Pkcs12SignatureTokenTest.java类()testPkcs12()方法。我得到了输出,所以算法与signDocument请求中的相同:
11:09:41.795[main]INFO eu.europa.esig.dss.token.AbstractSignatureTokenConnection-签名算法:SHA256withRSA
我使用了这个signValue,但签名PDF仍然无效。这可能是编码问题,您使用的私钥与公钥不对应,或者发送给getDataToSign和signDocument的参数不等效。如果看不到代码,很难说。我建议你用相关的代码编辑这个问题。testPkcs12()方法没有被我修改,只是更改了参数值、p12文件和toBeSigned变量的值。可能错误在SOAP参数的处理过程中:获取签名摘要时或发送签名时。在显示的值中,文本
AQIDBA==
不正确,并且与PCKS1签名不对应。查看代码的编码/解码部分,或者将代码发布在这里,我将试着看一看手动过程通常不会很好地结束。如果没有代码,没有看到您在每个步骤中发送的所有值的细节,我想我无法帮助您。正如我之前所说的,问题可能是base64和二进制值之间的编码/解码
var digestToSign = getDataToSign(document, params)
var signatureValue = PKCS#1_v1.5(privateKey, digestToSign, SHA256)
var finalDocument = signDocument(signatureValue)