赞
踩
cacerts 文件路径:运行java -verbose后, 开始第一行就是java jdk主路径,主路径下/lib/security/cacerts
我的完整路径:/usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts
cacerts 是加密文件,默认密码为changeit
好了,最后一步修改eclipse run 运行输入参数:-Djavax.net.ssl.trustStore=/usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit
下面有设置截图,当然 如用命令行javac 就直接带上这一串参数。
SSL网络编程都是由SSLServerSocketFactory SSLSocketFactory 两个类转换到 ServerSocket,Socket来完成,最终都归到socket 编程。所以我们只要理解了网络传输的各种协议,就可用socket 结合协议编出各种网络程序。经查才知道chrome没有truststore信任库,本来想拿chrome 浏览器的truststore 库来试试能不能也可以读https 。但是完全可以把浏览器下载的网页指纹加在cacerts中,作为truststore使用。先搞清楚openssl和https协议后,慢慢分解这个https认证过程。我一定要搞一个socket 版的https认证程序。戏称,要把java c 化。
读网页文件有两种思路,一种是用socket , 另一种是用httpconnection. 但第一种要自己写http,https请求协议。后一种java已封装好了,直接拿来用,但输出没有第一种灵活全面。
代码如下 ,留存参考
- import java.io.*;
- import java.net.*;
-
- import javax.net.ssl.SSLSocketFactory;
-
- public class Sslclient {
- public static void main(String[] args) {
- SSLSocketFactory ssf=(SSLSocketFactory)SSLSocketFactory.getDefault();
- try {
- Socket sc=ssf.createSocket("cn.bing.com",443);
-
- OutputStream os=sc.getOutputStream();
- InputStream is=sc.getInputStream();
-
- os.write("GET / HTTP/1.1\r\n".getBytes());
- os.write("Host:cn.bing.com\r\n".getBytes());
- os.write("Connection:close\r\n\r\n".getBytes());
- os.flush();
-
- InputStreamReader isr=new InputStreamReader(is,"UTF-8");
- int k;
- String s="";
- do{
-
- k=isr.read();
- s=s+(char)k;
- }while(k!=-1);
- System.out.print(s);
-
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。