0

我正在从命令行执行 W3C CSS 验证器 jar,它是从最新可用的源构建的。当 jar 请求某些 HTTPS url 时会引发异常。

有些 HTTPS 网址很好,有些则不然。在我知道的那些导致引发异常的情况中(只有一个),在 Chrome 中请求相关 URL 时,SSL 证书似乎很好。

我按如下方式调用 CSS 验证器:

java -jar css-validator.jar "https://example.com/"

并得到以下错误输出:

javax.net.ssl.SSLException: Server key
    at sun.security.ssl.Handshaker.throwSSLException(Handshaker.java:1274)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1032)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:515)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
    at org.w3c.css.util.HTTPURL.getConnection(HTTPURL.java:257)
    at org.w3c.css.util.HTTPURL.getConnection(HTTPURL.java:312)
    at org.w3c.css.css.DocumentParser.<init>(DocumentParser.java:124)
    at org.w3c.css.css.CssValidator.main(CssValidator.java:154)
Caused by: java.security.spec.InvalidKeySpecException: Could not create EC public key
    at sun.security.pkcs11.P11ECKeyFactory.engineGeneratePublic(P11ECKeyFactory.java:169)
    at java.security.KeyFactory.generatePublic(KeyFactory.java:334)
    at sun.security.ssl.HandshakeMessage$ECDH_ServerKeyExchange.<init>(HandshakeMessage.java:1057)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:218)
    ... 13 more
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_DOMAIN_PARAMS_INVALID
    at sun.security.pkcs11.wrapper.PKCS11.C_CreateObject(Native Method)
    at sun.security.pkcs11.P11ECKeyFactory.generatePublic(P11ECKeyFactory.java:233)
    at sun.security.pkcs11.P11ECKeyFactory.engineGeneratePublic(P11ECKeyFactory.java:164)
    ... 16 more

理想情况下,我希望完全忽略从命令行执行此 jar 时可能引发的所有此类 SSL 错误,使用以下内容:

java -ignore-all-of-these-ssl-errors-please -jar css-validator.jar "https://example.com/"

显然ignore-all-of-these-ssl-errors-please不是一个有效的命令行标志。

有没有可以做到这一点的标志?

4

1 回答 1

1

不可能。这样做是有原因的,这个原因是为了防止您编写其他人隐式信任的代码,以确保 SSL 会话是安全和真实的。它在 Chrome 而不是 Java 中工作的原因是 Java 带有一组非常稀疏的根 CA。

如果您不控制代码,解决此问题的唯一方法是将必要的 CA 证书添加到本地密钥库。我相信您可以以可以导入密钥库的形式导出 Chrome 的 CA。

于 2013-08-07T22:47:23.057 回答