netx+hessian+https

来源:互联网 发布:音乐消音软件 编辑:程序博客网 时间:2024/06/10 11:13

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、配置tomcathttps服务

打开tomcatserver.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、编写hessianhttps服务

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);

中间的12两端代码就是开启了https连接。

这个是基于jre/lib/security/jssecacerts文件实现的。

 

4、修改netx的代码

a) Netx是不支持https去下载jnlp文件的,所以需要修改它的源文件来支持

1Netx.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

这样访问应该就可以了

原创粉丝点击