java ext.dirs_使用java.ext.dirs出现的问题

最近在做网络爬虫,由于要用到HTTPS协议,在eclipse运行没有问题,但离开IDE手动运行时就会出现问题

运行java -Djava.ext.dirs="/xxx/xxx/lib" xxx.xxx.MainClass

报错问题如下:

javax.net.ssl.SSLKeyException: RSA premaster secret error

at sun.security.ssl.RSAClientKeyExchange.(RSAClientKeyExchange.java:87)

at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:912)

at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:348)

at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)

at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)

at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)

at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)

at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)

at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)

at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:290)

at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:259)

at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:125)

at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:319)

at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)

at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)

at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)

at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)

at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)

at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.security.NoSuchAlgorithmException: SunTls12RsaPremasterSecret KeyGenerator not available

at javax.crypto.KeyGenerator.(KeyGenerator.java:169)

at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:223)

at sun.security.ssl.JsseJce.getKeyGenerator(JsseJce.java:251)

at sun.security.ssl.RSAClientKeyExchange.(RSAClientKeyExchange.java:78)

... 22 more

跟踪了一下源码,发现他娘的java_home/jre/lib/security/java.security这个文件

只看关键位置

#

# List of providers and their preference orders (see above):

#

security.provider.1=sun.security.provider.Sun

security.provider.2=sun.security.rsa.SunRsaSign

security.provider.3=sun.security.ec.SunEC

security.provider.4=com.sun.net.ssl.internal.ssl.Provider

security.provider.5=com.sun.crypto.provider.SunJCE

security.provider.6=sun.security.jgss.SunProvider

security.provider.7=com.sun.security.sasl.Provider

security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI

security.provider.9=sun.security.smartcardio.SunPCSC

security.provider.10=sun.security.mscapi.SunMSCAPI

#

# Sun Provider SecureRandom seed source.

我这人比较懒,跟踪到这里不想跟下去了,直接百度得了

20b81a4ecc55b294c6171959e1054504.gif

百度解决方法如下:

把java_home/jre/lib/ext目录下的sunjce_provider.jar复制到自己的lib目录即可解决

但是问题到此还没有结束,加上sunjce_provider.jar后上面问题没有了,但新的问题又来了,由于项目中要调用外部JS,直接运行java  xxx.xxx.MainClass可以可以正常运行,但指定java.ext.dirs后又不正常了

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("JavaScript");

运行上面的代码,发现engine为null,获取不了JS引擎,tnn的,问题还真多,又百度了一下,结果万能的百度也不顶用了,怎么办,自己脑筋急转弯了一下下,应该和上面的问题一样,但不确定缺少的是哪个jar包,跟踪了一下源码,发现缺少nashorn.jar这个包,这个也是在ava_home/jre/lib/ext目录下面,  这个是1.8的,其他低版本的是哪个我就不晓得了,因为Nashorn是1.8才加进来的,恩恩,问题解决了,其他版本自己慢慢去找了^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值