java - 从命令行执行第三方 Jar,标记为忽略 SSL 问题?

标签 java command-line jar

我正在从命令行执行 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/

相关文章:

java - Selenium Java - 不使用 .click() 标记复选框已选中

即使已使用 javap 验证类路径和 .class 文件,Java 也找不到符号错误

java - 在线程中运行消息循环

java - 如何使用加速度计检测1Gs以上的振动?

javascript - 在页面上运行 JavaScript 代码而不显示浏览器窗口

command-line - 我应该在我的应用程序中包含命令行模式吗?

linux - 如何正确运行 Perl "one liner"命令行脚本?

java - 从启动的 jar 文件触发方法,该文件是通过 java 文件中的 Runtime...exec (".."加载的

java - Main-Class 未写入 jar list

java - Cookie 给出日期错误