最近在做网络爬虫,由于要用到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.<init>(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.<init>(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.<init>(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.
我这人比较懒,跟踪到这里不想跟下去了,直接百度得了
百度解决方法如下:
把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才加进来的,恩恩,问题解决了,其他版本自己慢慢去找了^_^
分享到:
相关推荐
用于自动配置java安装后的系统配置路径,安装完成java工具包JDE之后,直接运行本资源脚本,然后输入刚刚安装完成的JDE路径,即可自动配置Windows下环境变量所需要的所有信息。
linux-java-jar包启动脚本
6. 然后javac -Djava.ext.dirs="JCuda-All-0.8.0-bin-linux-x86_64" CudaGdbscan.java和javac -Djava.ext.dirs="JCuda-All-0.8.0-bin-linux-x86_64" Test.java分别编译; 7. 最后运行java -Djava.ext.dirs="JCuda-...
如果仍有问题,检查是否使用了JDK 8.0,因为Luckyframe可能与此版本兼容最好。 - 右键项目,选择"Run As" -> "Maven install"来编译和构建项目。 - 最后,导航至`src/main/java>>com.luckyframe`下的`...
- 示例代码:`System.getProperty("java.ext.dirs")` - 应用场景:加载扩展库。 20. **`os.name`** - 描述:操作系统名称。 - 示例代码:`System.getProperty("os.name")` - 应用场景:根据操作系统做特定...
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Output_Path=.\source //输出目录 set Package= com.test.webservice.client %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% ...
- `java.ext.dirs`: 扩展目录或目录列表的路径。 - `os.name`: 操作系统名称。 - `os.arch`: 操作系统架构。 - `os.version`: 操作系统版本。 - `file.separator`: 文件分隔符(UNIX系统中通常为“/”)。 - `path....
Solving the problem was a matter of putting the sunjce_provider.jar in one of the folders specified in the java.ext.dirs parameter. Hard to find, easy to solve. 把sunjce_provider.jar 放到JDKclasspath...
`java.ext.dirs`是Java扩展目录的路径,用于存放可选的Java扩展类库。 关于操作系统的信息,有`os.name`(操作系统名称)、`os.arch`(操作系统架构)和`os.version`(操作系统版本)。文件、路径和行的分隔符可...
cd D:\selenium快速入门示例 D: set JAVA_HOME=E:\tools\java\jdk1.8.0_181x64 set PATH=%JAVA_HOME%\bin;%PATH% javac -encoding utf-8 -Djava.ext.dirs=....java -Djava.ext.dirs=. SogouTest1 pause
●java.ext.dirs:JDK的安装目录; ●os.name:操作系统名称; ●user.name:用户登录名称; ●os.version:操作系统版本; ●path.separator:当前操作系统的路径分隔符; ●user.dir:当前用户...
- **`java.ext.dirs`**:指定了一个或多个扩展目录的路径。这些目录包含了JRE提供的额外类库。 #### 操作系统相关信息 - **`os.name`**:显示操作系统名称,例如“Windows 10”、“Linux”等。 - **`os.arch`**:...
- **一个或多个扩展目录的路径** (`java.ext.dirs`):指明了JVM用于加载扩展类的目录路径。 - **用户的账户名称** (`user.name`):显示了当前用户的账户名。 通过以上介绍,我们可以看到`System.getProperties()`...
java -Djava.ext.dirs=. httpserver.HttpServer [HTML服务所在路径] [端口] HTML服务所在路径及端口参数是可选的,路径默认路径为当前应用所在路径,默认端口为1234,首页文件可为index.html或 index.html 启动好后...
- **扩展目录**:`java.ext.dirs`,列出了包含扩展包的目录列表。 ### 操作系统信息 操作系统相关的属性提供了对运行Java程序的主机操作系统的深入了解: - **操作系统名称**:`os.name`,如“Linux”、“Windows...
#### 10.1 `java.ext.dirs` 返回包含可选扩展包的目录列表。 ### 11. 获取操作系统信息 #### 11.1 `os.name` 返回操作系统的名称,如`Windows 10`、`Linux`或`Mac OS X`。 #### 11.2 `os.arch` 返回操作系统的...
1、解压文档后,"/tmp/模板文件.doc" 2、然后在jar包的当前路径的执行一下以下命令(前提安装了jdk1.8) 输入命令:java -Djava.ext.dirs=./lib -jar upLoadFileTestDir.jar
在这个过程中,我们需要指定JVM的路径,并且可以配置一些参数,如`"-Djava.ext.dirs=%s"`来设置扩展目录路径。 ```python import os import jpype # 获取JVM路径 jar_path = os.path.join(os.path.abspath('....
-Djava.ext.dirs=lib #启动示例 nohup java --add-opens java.base/java.lang=ALL-UNNAMED -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Djava.ext.dirs=lib -jar eladmin-starter-...
Extension 类加载器将加载类的请求先委托给它的父加载器,也就是 Bootstrap,如果没有成功加载的话,再从 jre/lib/ext 目录下或者 java.ext.dirs 系统属性定义的目录下加载类。Extension 加载器由 sun.misc.Launcher...