验证网址secKey

2020-08-19 17:06发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要一些帮助来实现用于归档链接的小型接口(http接口)。 我想使用seckey参数和sap系统提供的证书来验证url。

我正在使用bouncycastle作为安全提供程序,但出现错误。 我得到的错误是"错误解码签名字节"。 我不确定在开始验证之前是否必须对secKey做些事情。

有人尝试过吗? 您如何验证网址?

欢迎使用代码和小费!!!

请帮助。

我的代码:

secKey =包含sec-key参数的urldecoded值的字节数组

MessageDigest md5 = MessageDigest.getInstance(" MD5");

byte [] hash = md5.digest(buffer);

java.security.Signature dsa2 = java.security.Signature.getInstance(" SHA1withDSA"," BC");

dsa2.initVerify(certificate.getPublicKey());

dsa2.update(hash);

System.out.println(" Verification:" + dsa2.verify(secKey));

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要一些帮助来实现用于归档链接的小型接口(http接口)。 我想使用seckey参数和sap系统提供的证书来验证url。

我正在使用bouncycastle作为安全提供程序,但出现错误。 我得到的错误是"错误解码签名字节"。 我不确定在开始验证之前是否必须对secKey做些事情。

有人尝试过吗? 您如何验证网址?

欢迎使用代码和小费!!!

请帮助。

我的代码:

secKey =包含sec-key参数的urldecoded值的字节数组

MessageDigest md5 = MessageDigest.getInstance(" MD5");

byte [] hash = md5.digest(buffer);

java.security.Signature dsa2 = java.security.Signature.getInstance(" SHA1withDSA"," BC");

dsa2.initVerify(certificate.getPublicKey());

dsa2.update(hash);

System.out.println(" Verification:" + dsa2.verify(secKey));

付费偷看设置
发送
9条回答
Bunny_CDM
1楼-- · 2020-08-19 17:30

您好Torsten,因为您一直在使用HTTP。 存档,我想知道我是否可以动动脑筋????

我正在尝试编写一个.NET(或Java,我并不挑剔)Web服务,该服务将从SAP Content Server检索文档。

我了解到我需要为内容服务器构建一个URL来检索每个文档,并且该URL的一部分是安全密钥" secKey"。

我看过以下文件:

http://help.sap .com/saphelp_nw2004s/helpdata/en/f5/9561c8f3b111d1955b0000e82deb58/content.htm

http://help.sap .com/saphelp_nw2004s/helpdata/en/9b/e8c192eaf811d195580000e82deb58/content.htm

除如何创建" secKey"外,其他一切似乎都很好。 我可以根据需要对URL参数进行哈希处理,但是我不知道如何对其进行签名-如何执行此操作以获取发送者的私钥?

对此的任何帮助将不胜感激!

大道至简
2楼-- · 2020-08-19 17:17

我将sdn上的Java代码示例修改为C#,并且可以正常工作。

注意:在内容服务器文档中的每个函数中,它列出了查询字符串的参数。 该参数表的最后一列称为符号(Yes/No),用于指示哪些参数s/b用于构建验证消息。 这些构成了message2Sign的值。

good变量包含secKey的值。

添加对BouncyCastle.Crypto的引用

使用Org.BouncyCastle;
 使用System.Text;
 使用Org.BouncyCastle.X509;
 使用Org.BouncyCastle.Cms;


           byte [] message2Sign = Encoding.Default.GetBytes(" E25B5CECB6846E1F4F92C9E9058BC415FDrCN%3DC1120071026161701");
             串好= "MIIBlAYJKoZIhvcNAQcCoIIBhTCCAYECAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHATGCAWAwggFcAgEBMBMwDjEMMAoGA1UEAxMDQzExAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNzEwMjYxNDE3MDFaMCMGCSqGSIb3DQEJBDEWBBT/ObaVw5qhQRX5MTMnyVqptXhwnTCBpgYFKw4DAhswgZwCQQEi9Vy1IpGpgBwpby66sV16jIHOJkoJI/blRDbeogY2I + S69a9 + JmlAfQEn + ttGqA3jv/QAf98zFtmFpsDwniO1AhUBQNzq3BaLZ3Vj2dGBB5HPZh5eBa0CQHsZv4pNumfHRNhmlbKK9TDgPQrDDnG7F51g1FhTAFvceltg20WjHE/dFaH8jkigzaJDkFI + uV50yGPytGPYmekELzAtAhUBBudqwTj + JNfkpr6BausHDZpqMmUCFC9rWauPQhjYNp4tiHWPmpgw9NXl";
             串坏= "MIIBlAYJKoZIhvcNAQcCoIIBhTCCAYECAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHATGCAWAwggFcAgEBMBMwDjEMMAoGA1UEAxMDQzExAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNzEwMTgxMTQxNTVaMCMGCSqGSIb3DQEJBDEWBBS + 2xHiq + u4ZssgcURXnsqx + hf5kTCBpgYFKw4DAhswgZwCQQEi9Vy1IpGpgBwpby66sV16jIHOJkoJI/blRDbeogY2I + S69a9 + JmlAfQEn + ttGqA3jv/QAf98zFtmFpsDwniO1AhUBQNzq3BaLZ3Vj2dGBB5HPZh5eBa0CQHsZv4pNumfHRNhmlbKK9TDgPQrDDnG7F51g1FhTAFvceltg20WjHE/dFaH8jkigzaJDkFI + uV50yGPytGPYmekELzAtAhUBOKbZGs22bN + iMQ8UkPL4vaPewDwCFFof2Pv04DXMDPj2SnZ7wMcCKTfH";
             byte []签名= Convert.FromBase64String(good);
             byte [] certBytes = System.IO.File.ReadAllBytes(@" cert.certs"); //认证路径
             X509CertificateParser certParser =新的X509CertificateParser();
             X509Certificate cert = certParser.ReadCertificate(certBytes);
             Org.BouncyCastle.Crypto.AsymmetricKeyParameter pk = cert.GetPublicKey();
             CmsProcessable processable =新的CmsProcessableByteArray(message2Sign);
             CmsSignedData s =新的CmsSignedData(可处理的签名);

             SignerInformationStore签署人= s.GetSignerInfos();
             System.Collections.ICollection c = signers.GetSigners();

             System.Collections.IEnumerator它= c.GetEnumerator();
             it.MoveNext();
             SignerInformation signer =(SignerInformation)it.Current;

            //验证
             bool test2 = signer.Verify(cert); 
落灬小鱼
3楼-- · 2020-08-19 17:28

我发现这更加棘手:SAP发送的authId与此类似(系统名称已更改):CN%3D55,OU%3DD55,O%3DSAPTrustCommunity,C%3DDE 20200411171741

此部分已部分编码:等号已编码('='为%3D),但逗号未编码。 因此,请注意仅对参数进行多带带解码/编码,并注意authId参数中的混合模式。

您可以在内容服务器的访问日志中看到SAP发送的消息并进行比较。

一周热门 更多>