gpt4 book ai didi

java - 使用 Windows 下生成的 (.PFX) 证书对 Java 中的文本进行签名

转载 作者:行者123 更新时间:2023-12-02 08:44:44 35 4
gpt4 key购买 nike

我们在使用 Windows 下生成的 .pfx 证书签署 Java 文本字符串时遇到问题。首先,我们在 Ubuntu Linux 12.0.4 LTS 上按如下所示的顺序执行以下步骤:

  1. 使用以下命令将 .pfx 证书转换为 java keystore (jks):

    openssl pkcs12 -in SupportTest-.pfx -out tempcertfile.crt -nodes

  2. 将证书拆分为两个单独的文件:

    • 包含私钥(key.pem)的文件

    • 包含其余部分的另一个文件 (cert.pm)

  3. 将第 2) 点中的 key 证书导出到 PKCS12 类型的 keystore

    openssl pkcs12 -export -in cert.pm -inkey key.pem -out aKeystore.p12 -name akeystore

  4. 将 pkcs12 keystore 转换为 java keystore jks

    keytool -importkeystore -srckeystore aKeystore.p12 -srcstoretype PKCS12 -deskeystore akeystore.jks -destoretype jks

  5. 使用从 jks ketstore 检索到的私钥对短信进行签名

我们使用 Java 7 对文本进行签名。我们没有遇到任何编码问题,java.security.Signature 中的 initVerify() 方法返回 true。问题在于,当使用 .Net 平台在 Windows 上对代码进行签名时,签名与 Java 生成的签名不同。这两个应用程序都使用 SHA256 和 RSA。

下面是我们用来签署文本的代码示例:

Signature signature = Signature.getInstance("SHA256WithRSA");
signature.initSign(privateKey);
signature.update(dataToSign);
return new String(Base64.encodeBase64(signature.sign()));

最佳答案

您的 Java 代码和 keystore 看起来不错。

也许 C# 和 Java 中的文本编码不同,并且您会得到不同的字节数组进行签名。在这种情况下你会得到不同的结果。尝试在签名之前比较原始字节。

也许您使用不同的 key - 仔细检查两个平台上私钥的路径。

关于java - 使用 Windows 下生成的 (.PFX) 证书对 Java 中的文本进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053991/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com