java - 为什么 java 在 cacert.org : "keyCertSign bit is not set"? 上制作的证书上阻塞

标签 java ssl

我在 CAcert 创建了一个 SSL 服务器证书.当我尝试通过 Java 程序(如下)从该服务器获取页面时,我得到了

Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: CA key usage check failed: keyCertSign bit is not set

有人知道是什么原因造成的吗?

  • 我尝试创建由他们的 1 类和 3 类根证书签名的证书,结果相同。
  • 当我尝试从其他两个使用 CAcert.org 证书的站点获取页面时,错误不会发生:https://www.cacert.orghttps://pause.perl.org (让我相信来自 cacert.org 的根证书和 3 类证书已正确安装在我的系统上)。
  • 我可以在 keytool -keystore/etc/ssl/certs/java/cacerts -list 中看到 cacert.org 证书。
  • 是的,我知道很少有网络浏览器附带 cacert.org 根证书和 3 类证书。
  • 证书是 *.an.example.com 的通配符证书(已编辑真实域)。

这是我用来测试的 Java 代码:

class Test {
    public static void main(String args[]) throws Exception {
        java.net.URL url = new java.net.URL(args[0]);
        java.io.InputStream s = url.openStream();
    }
}

full stack trace似乎没有添加任何有用的信息。

keytool(1) 联机帮助页确实提到了

Extensions can be marked critical to indicate that the extension should
be checked and enforced/used. For example, if a certificate has the
KeyUsage extension marked critical and set to "keyCertSign" then if this
certificate is presented during SSL communication, it should be rejected,
as the certificate extension indicates that the associated private key
should only be used for signing certificates and not for SSL use.

但我检查了证书,虽然“证书 key 使用”扩展确实显示“签名”,但它也被标记为“不重要”。

抱歉,我不想透露我的域名或证书,但如果需要,我可能可以启动服务器进行测试。

最佳答案

原来是证书本身的问题。 Folks at CAcert.org fixed it .耶!

关于java - 为什么 java 在 cacert.org : "keyCertSign bit is not set"? 上制作的证书上阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8179932/

相关文章:

java - 对象反射信息存储在哪里?

java - Wicket - 在单击事件上使用可加载可拆卸模型初始化组件

java - 在 Play 商店发布后 map 无法加载

ssl - 使用 TLS/SSL 实现后控制台生产者错误

ssl - ASP.Net 网站上的 CloudFlare Flexible SSL Redirect Loop

java - 使用自定义字体更改 recyclerview 中的文本

java - 从 mvn jetty :run 启动 Jetty 时出错

redirect - Cloudfront 使用 SSL 将 www 重定向到裸域

android - 覆盖 Android 中的 SSL 信任管理器

.net - .NET 4 是否更改了证书请求框架在 TLS 中的应答方式