https站点强制通信协议TLSv1.2

现在网络安全原来越重要,好多公司网站需要ssl支持,也就是要求客户通过https访问公司站点,由于TLSv1.1容易被黑客攻击,于是很多企业要求站点只提供TLSv1.2协议支持。

对Java 程序,TLSv1.2的实现中, oracle 从JDK1.7 update96以后的版本才开始支持,IBM JDK 采用的是类似的方案。只有从JDK1.8开始才是默认支持的。

https://bugs.openjdk.java.net/browse/JDK-7093640

https://www.java.com/en/configure_crypto.html#enableTLSv1_2

https://wiki.openssl.org/index.php/Manual:Ciphers(1) 参见TLSv1.2支持的cipher list.

TLSv1.2协议支持具体要分三部分内容。

<一>服务器对TLSv1.2的支持。

具体要看服务器采用的是那种服务器,这里主要讲Apache web server 和Tomcat 为基础的web 服务器。

Apache web server:

更新文件 httpd-ssl.conf于如下路径:WebServer/conf/extra/


做如下更改: 

#Limit Protocol to TLSv1.2
SSLProtocol +TLSv1.2


#Update cipher suites to remediate variousencryption related vulnerabilities
SSLHonorCipherOrder On
SSLCipherSuiteECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256

 

Tomcat:

 更新文件 wrapper.conf 文件于如下路径

 Tomcat/conf/ (Windows) or the setenv.shscript file (UNIX) with the following modifications:

 ·        添加参数 -Djdk.tls.client.protocols=TLSv1.2 在 Java Virtual Machine (JVM) arguments.

针对AIX 环境参数变为-Dcom.ibm.jsse2.overrideDefaultProtocol="TLSv12".

·       如果Tomcat 配置了TLS , 更新文件 server.xml 在如下路径

Tomcat/conf/, 如下. 在<Connector> 定义中, 更改 ciphers 和 sslProtocols 参数如下:

ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA" sslProtocols="TLSv1.2"


<二>客户端设置对TLSv1.2的支持

现代浏览器对TLS 1.2 默认支持的版本如下: 
  
    Firefox: Next 6 months (either version 27 or 28) 
    IE version 11 
    Google Chrome 31 
    Opera 18 on Windows 
    Safari 7.0 on Mac 


  ①.打开Java Control Panel,查看Java支持的TLS版本

  ②.高级。拉到最下面。

                      

                                    

为了你的浏览器在访问时不弹出不安全访问访问提示,你需要在浏览器中导入客户端证书。


TrustError IE.png

<三>客户端默认通过TLSv1.2访问设置。


本文以httpClient 4.5.1为例,特别讲述了怎么让客户端程序强制通过TLSv1.2通信的代码修改。



  1. import org.apache.http.impl.client.DefaultHttpClient;  
  2.   
  3. public class SSLClient extends DefaultHttpClient {  
  4.         public SSLClient() throws Exception {  
  5.             super();  
  6.             SSLContext ctx = SSLContext.getInstance("TLSv1.2");  
  7.             X509TrustManager tm = new X509TrustManager() {  
  8.                 @Override  
  9.                 public void checkClientTrusted(X509Certi<a target=_blank target="_blank" href="http://superuser.com/questions/747377/enable-tls-1-1-and-1-2-for-clients-on-java-7">http://superuser.com/questions/747377/enable-tls-1-1-and-1-2-for-clients-on-java-7</a>ficate[] chain, String authType) throws CertificateException {  
  10.                 }  
  11.   
  12.                 @Override  
  13.                 public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
  14.                 }  
  15.   
  16.                 @Override  
  17.                 public X509Certificate[] getAcceptedIssuers() {  
  18.                     return null;  
  19.                 }  
  20.             };  
  21.             ctx.init(nullnew TrustManager[] { tm }, null);  
  22.             org.apache.http.conn.ssl.SSLSocketFactory ssf = new org.apache.http.conn.ssl.SSLSocketFactory(ctx,  
  23.                     org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  
  24.             ClientConnectionManager ccm = this.getConnectionManager();  
  25.             SchemeRegistry sr = ccm.getSchemeRegistry();  
  26.             sr.register(new Scheme("https"443, ssf));  
  27.         }  
  28.     }  

为了测试需要你可以通过如下代码来测试你的客户端环境,看你的客户程序可以采用的协议:


  1. public static void main(String[] args) throws Exception {  
  2.         SSLContext context = SSLContext.getInstance("TLS");  
  3.         context.init(nullnullnull);  
  4.   
  5.         SSLSocketFactory factory = (SSLSocketFactory) context.getSocketFactory();  
  6.         SSLSocket socket = (SSLSocket) factory.createSocket();  
  7.   
  8.         String[] protocols = socket.getSupportedProtocols();  
  9.   
  10.         System.out.println("Supported Protocols: " + protocols.length);  
  11.         for (int i = 0; i < protocols.length; i++) {  
  12.             System.out.println(" " + protocols[i]);  
  13.         }  
  14.   
  15.         protocols = socket.getEnabledProtocols();  
  16.   
  17.         System.out.println("Enabled Protocols: " + protocols.length);  
  18.         for (int i = 0; i < protocols.length; i++) {  
  19.             System.out.println(" " + protocols[i]);  
  20.         }  
  21.   
  22.     }  



  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Wireshark可以解密TLSv1.2加密的数据流,只需要在Wireshark中配置相应的密钥即可。具体步骤如下: 1. 打开Wireshark并加载TLSv1.2加密的数据包。 2. 找到TLSv1.2加密的数据包,右键点击该数据包并选择“解密As”。 3. 在弹出的“解密协议”窗口中选择“Transport Layer Security(TLS)”并点击“编辑”按钮。 4. 在“编辑解密密钥”窗口中输入相应的密钥,点击“OK”按钮保存。 5. 重新加载数据包,Wireshark将自动解密TLSv1.2加密的数据流。 需要注意的是,为了成功解密TLSv1.2加密的数据流,必须拥有相应的密钥。如果没有密钥,无法解密数据流。 ### 回答2: Wireshark是一个流行的开源网络分析工具,用于分析网络数据包并提供诸如协议分析、流量分析、数据包捕获、IO图形化等功能。Wireshark支持许多协议,包括TLS协议。 TLS(Transport Layer Security)是保护互联网通信的一种协议,TLS通常用于对HTTPS连接进行加密。TLS的加密过程中,数据包被加密,导致Wireshark无法直接解密存储在其中的通信。因此,用户需要将私钥导入Wireshark以解密TLS通信。 为了进行Wireshark TLSv1.2解密,需要有以下基本信息: - TLS会话的所有通信内容的pcap文件 - SSL服务器私钥。与服务器私钥关联的证书是用于验证服务器身份的证书。如果您不能拥有该证书,您可能无法解密通信。 - Wireshark安装了GnuTLS库,以使解密功能可用 - 使用openssl生成了可导入Wireshark的SSL服务器私钥文件,该私钥文件需要扩展名“.key”,以及用于生成私钥的证书。(openssl genrsa -out /path/to/server.key 2048,openssl req -new -out /path/to/server.csr -key /path/to/server.key,openssl x509 -req -days 3650 -in /path/to/server.csr -signkey /path/to/server.key -out /path/to/server.crt) 如果您已经准备好了上述需求,则可以按照以下步骤进行解密: 1. 打开Wireshark,点击edit > preferences 2. In protocol选择SSL,选中RSA key列表中的“+”,添加key文件 3. 填写以下信息: - 协议: SSL - 密钥类型:私人 - 密钥文件:您生成的.crt文件 - 密钥密码:如果有则需要填写 4. 点击OK保存设置 5. 打开pcap文件 6. 如果您已正确导入SSL服务器私钥,Wireshark现在应能够解密TLS数据包并正确显示会话内容。 需要注意的是,Wireshark TLS解密功能通常只能在本地计算机上进行,因为它需要访问私钥文件。也就是说,无法使用Wireshark远程解密TLS通信。另外,在使用本功能时,Wireshark会在内存中保存您的私钥文件,因此应确保采取适当的安全措施,以确保未经授权的人无法访问您的私钥文件。 在进行Wireshark TLSv1.2解密时,需要仔细检查所有交换的密钥,以确保安全地执行此操作。TLS通信的加密性质使得初学者在设置过程中容易出错,可能会导致未经授权的访问或者数据泄漏。因此,谨慎使用Wireshark TLSv1.2解密功能是非常重要的。 ### 回答3: Wireshark是一种流行的网络分析工具,允许用户在网络流中查看和分析数据包。然而,由于TLS1.2是一种加密协议,Wireshark默认情况下无法解密TLS1.2流量。但是,Wireshark可以手动配置来解密TLS1.2流量,并且可以从中分析明文数据。 要解密TLS1.2流量,需要以下步骤: 第一步,获取私钥和证书。在TLS握手期间,服务器向客户端发送证书,而其中包含公钥。获取此证书并将其导出为PEM格式。同时,需要在服务器上获取TLS私钥。这可以通过在服务器上使用openssl命令行,提供私钥密码,以及对应证书的路径。 第二步,配置Wireshark以使用私钥和证书来解密TLS1.2流量。在Wireshark中,打开“Edit -> Preferences -> Protocols -> TLS”,然后点击“Edit”按钮。在“Pre-Master secret log filename”字段中输入文件路径,以便Wireshark可以记录握手期间预先主密钥。在“RSA keys list”字段中,添加私钥和证书对应的PEM文件。 第三步,启动Wireshark捕获,并开始记录TLS1.2流量。为了查看解密的数据,请右键单击加密流量,然后选择“Decode As...”,并将其解码为“TLS”,以使用先前配置的RSA密钥解密。 通过这种方法解密TLS1.2流量,可以帮助网络管理员或安全专家检测网络上的安全问题,并分析网络流量中的潜在风险。但同时也要注意,这需要获取服务器的私钥,因此需要谨慎处理,避免私钥泄露导致网络安全问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值