学习https的总结

公司的游戏需要个弱联网服务器来保存用户的信息,游戏的成绩排名等数据,服务器程序写好了,但用户名密码是属于敏感数据要防止其他人截获,这就涉及到了数据加密的问题。

服务器用的是http服务器,属于弱联网。强连接的数据加密比较好办,用对称加密的方式就可以处理。但弱联网服务器不能确定是哪个客户端发来的数据,及发向哪个目标服务器,所以还需要身份验证。

http通信通常有三种风险:

1:窃听风险 2:篡改风险 3:冒充风险。于是SSL/TSL相应就采取了如下3种措施来防范这些风险

1:所有信息加密传播,防止窃听。2:具有校验机制,一旦被篡改通信双方会立刻发现。3:配备证书机制,防止身份被冒充。

在网上看了一堆讲的云里雾里的文章,又和朋友聊了一些,终于把https的一些基本思路弄明白了。


1:在服务器上用java的keytool创建一个keystore,同时会在其中保存了公钥,私钥,数字证书。

2:数字证书需要被CA机构签名,这才能成为被大家公认的合法证书,否则各大浏览器在访问自己的https网站是会提示证书不合法。

3:配置tomcat,打开8443端口指定keystore文件位置。

4:用户拿到证书后,导入证书库,可正常访问指定的https网站。


如果,只需要数据加密,不需要对方的身份验证,那就只需要做1 3步骤就可以了。然后在程序里做特殊处理,以下的程序可不要求证书验证也能正常访问https网站。


/** 
 * 通过自定义 TrustManager 来实现无根证书时访问 https 
 * @date    2013-8-29 
 * @file    HttpsClient.java 
 */  
public class HttpsClient {  
      
    /** 
     * 测试 https 
     * @param args 
     */  
    public static void main(String[] args) throws Exception {  
        // init https  
        HttpsClient.init();  
          
        URL url = new URL("https://ugame.net.cn:8443/UGameCenter/ugametime");  
        url.openConnection();  
        InputStream in = url.openStream();  
        BufferedReader buf = new BufferedReader(new InputStreamReader(in));  
        String line = null;  
        while ((line = buf.readLine()) != null){  
            System.out.println(line);  
        }  
        buf.close();  
        in.close();  
          
//        System.out.println("-- finished --");  
    }  
      
    /** 
     * 初始化 
     */  
    public static void init() {  
        try {  
            SSLContext sslCtx = SSLContext.getInstance("TLS");  
            sslCtx.init(null, new TrustManager[]{new MyTrustManager()}, null);  
            SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();  
            HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);  
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {  
                @Override  
                public boolean verify(String hostname, SSLSession session) {  
                    return true;  
                }  
            });  
        }  
        catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  
/** 
 * 默认信任服务端根证书 
 */  
class MyTrustManager implements X509TrustManager {  
      
    @Override  
    public void checkClientTrusted(X509Certificate[] chain, String authType)  
            throws CertificateException {  
        return;  
    }  
      
    @Override  
    public void checkServerTrusted(X509Certificate[] chain, String authType)  
            throws CertificateException {  
        return;  
    }  
      
    @Override  
    public X509Certificate[] getAcceptedIssuers() {  
        return null;  
    }  
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值