1、生成证书 用java自带的工具
keytool -genkey -keystore yunjiankong.keystore -alias yunjiankong -validity 36500
yunjiankong.keystore为生成文件的文件名 , yunjiankong为别名,36500为有效期,这 里指100年
这样会在当前目录生成一个yunjiankong.keystore的文件,这个就是证书了
2、配置jdk的加密
将刚才的yunjiankong.keystore文件拷贝一份,然后重命名为"jssecacerts",放到你所使用 的jdk/jre/lib/security目录下
这样做的原因:
1、若系统属性javax.net.sll.trustStore指定了TrustStore文件,那么信任管理器就去 jre安装路径下的lib/security/目录中寻找并使用这个文件来检查证书。
2、若该系统属性没有指定TrustStore文件,它就会去jre安装路径下寻找默认的 TrustStore文件,这个文件的相对路径为:lib/security/jssecacerts。
3、若jssecacerts不存在,但是cacerts存在(它随J2SDK一起发行,含有数量有限 的可信任的基本证书),那么这个默认的TrustStore文件就是 lib/security/cacerts。
2、配置tomcat的https服务
打开tomcat的server.xml。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
这一段是http的服务,把它注释掉
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="E:/yunjiankong.keystore" keystorePass="123456" />
这一段是https的服务,默认是注释掉的,把它打开,然后后面加上 keystoreFile="E:/yunjiankong.keystore" keystorePass="123456" />
keystoreFile是刚生成的文件的位置,keystorePass为生成文件时输入的密码
这样就可以了。
3、编写hessian的https服务
String url = "https://localhost:8443/Taoism/hessian/data";
HessianProxyFactory factory = new HessianProxyFactory();
DataService data = null;
1、 HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return urlHostName.equals(session.getPeerHost());
}
};
2、 HttpsURLConnection.setDefaultHostnameVerifier(hv);
data = (DataService)factory.create(DataService.class, url);
中间的1和2两端代码就是开启了https连接。
这个是基于jre/lib/security/jssecacerts文件实现的。
4、修改netx的代码
a) Netx是不支持https去下载jnlp文件的,所以需要修改它的源文件来支持
1、Netx.jnlp.cache.Resource类的修改
将URLConnection connection属性修改为HttpsURLConnection connection
2、Netx.jnlp.cache.ResourceTracker类的initializeResource 方法
System.setProperty("java.protocol.handler.pkgs","javax.net.ssl");
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return urlHostName.equals(session.getPeerHost());
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
// connect
TrustManager myX509TrustManager = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
};
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null,new TrustManager[]{myX509TrustManager}, null);
HttpsURLConnection connection = (HttpsURLConnection)resource.location.openConnection(); // this won't change so should be okay unsynchronized
connection.setSSLSocketFactory(sslcontext.getSocketFactory());
这就是将原来的http连接改成了https连接了,然后替换掉原jar包中的这两个类
5、这样应该就可以了,部署项目
a) java -cp netx-0.5.2.jar netx.jnlp.runtime.Boot --property -verbose -basedir . -headless -nosecurity -jnlp https://localhost:8443/Taoism/launch.jnlp?name=123
这样访问应该就可以了