【问题标题】:Signature Algorithm SHA256withRSA failed in Java签名算法 SHA256withRSA 在 Java 中失败
【发布时间】:2020-01-24 19:57:14
【问题描述】:

I have identically generated and signed certificates in Raspberry Pi and Ubuntu Linux.

SSL 连接在 Raspberry 上正常工作,而在 Ubuntu 上失败并出现错误 Received fatal alert: unknown_ca

在证书验证过程中我发现了不同之处:

失败(AWS 上的 Ubuntu)

*** CertificateVerify
Signature Algorithm SHA256withRSA

好(树莓派)

*** CertificateVerify
Signature Algorithm SHA512withRSA

为什么我有不同的签名算法?在这两种情况下,都使用相同的命令来创建和签署证书。

在与 Java 通信时会不会有问题?

UPD

尝试启用无限强度管辖政策

我的 Java 安装中有两个文件夹,其中包含 local_policy.jarUS_export_policy.jar

C:\java\jdk1.8.0_241\jre\lib\security\policy\limited
C:\java\jdk1.8.0_241\jre\lib\security\policy\unlimited

我想unlimited 文件夹包含所需的库,但请确保我已从Oracle 下载并覆盖它们。

我在C:\java\jdk1.8.0_241\jre\lib\security\java.security 文件中取消了crypto.policy=unlimited 行的注释

但问题仍然存在。直到有错误:

MQTT Con: 2, RECV TLSv1.2 ALERT:  fatal, unknown_ca
%% Invalidated:  [Session-1, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]

【问题讨论】:

  • 您在两个平台上都使用哪个版本的 Java(以及来自哪个“供应商”)?
  • 我在 Linux 系统上使用 Mosquitto MQQT 和 Oracle 的 Java 8 作为客户端。
  • 在 Java 13 中遇到同样的错误
  • CertificateVerify 算法与证书签名或警报无关(请参阅对原始 Q 的评论),它们都不受加密政策的任何影响。

标签: java ssl paho pyopenssl java-security


【解决方案1】:

我会尝试检查您的客户是否启用了Unlimited Strength Jurisdiction Policy

  • $JAVA_HOME/jre/lib/security(用于 JDK)
  • $JAVA_HOME/lib/security (JRE)

文件必须有以下行:crypto.policy=unlimited

如果它不存在,则必须从 Oracle 下载可分发文件,然后将上述行添加到 security 文件中。

【讨论】:

  • 我找到了$JAVA_HOME/jre/lib/security/java.security 文件和未记录的必需行。 $JAVA_HOME/lib/ 中没有 security 文件夹。更改后我仍然有同样的错误
  • @vico,如果该行已被注释掉,那么必须取消注释它连同从我发布的链接从 Oracle 安装 JAR 文件
  • 你是对的,我确实需要更改,但仍然有同样的错误。 UPD 中的更多详细信息。
  • 自 2017 年 8u161 以来,无限制策略一直是默认策略,更重要的是,“限制”策略从未应用于散列或签名。
猜你喜欢
  • 2012-08-02
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2019-04-06
  • 2023-03-06
相关资源
最近更新 更多