我正在从命令行执行 W3C CSS validator jar,它是根据最新的可用源构建的。当 jar 请求某些 HTTPS url 时,会引发异常。
有些 HTTPS 网址可以,有些则不行。据我所知(只有一个),在那些导致异常的情况下,在 Chrome 中请求相关 URL 时,SSL 证书似乎没问题。
我按如下方式调用 CSS validator :
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
不是一个有效的命令行标志。
有一个标志可以做到这一点吗?
最佳答案
不可能。这样做是有原因的,这个原因是为了防止您编写其他人隐式信任的代码,以确保 SSL session 安全且真实。它在 Chrome 中工作而不是在 Java 中工作的原因是 Java 附带了一组非常稀疏的根 CA。
如果您无法控制代码,解决此问题的唯一方法是将必要的 CA 证书添加到本地 keystore 。我相信您可以以可导入 keystore 的形式导出 Chrome 的 CA。
关于java - 从命令行执行第三方 Jar,标记为忽略 SSL 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18114966/