如何在java中使用TLSv1.2

问题描述:

我有一个使用TLS的java聊天应用程序,但是当我使用Wireshark捕获数据时,协议列显示值“TCP”,为什么它不显示为“TLS”。我的代码发生了什么?如何在java中使用TLSv1.2

CertificateFactory cf = CertificateFactory.getInstance("X509"); 
X509Certificate cert = (X509Certificate) cf.generateCertificate(
    this.getClass().getResourceAsStream("/"+"lib/ca.crt") 
); 

InputStream is=this.getClass().getResourceAsStream("/"+"lib/plainclient.jks"); 
KeyStore clientKeys = KeyStore.getInstance("JKS"); 
clientKeys.load(is,"xuanthinh".toCharArray()); 
KeyManagerFactory clientKeyManager = KeyManagerFactory.getInstance("SunX509"); 
clientKeyManager.init(clientKeys,"xuanthinh".toCharArray()); 

KeyStore ks = KeyStore.getInstance("JKS"); 
is=this.getClass().getResourceAsStream("/"+"lib/serverpub.jks"); 
ks.load(is,"xuanthinh".toCharArray()); 
TrustManagerFactory trustManager = TrustManagerFactory.getInstance("SunX509"); 
trustManager.init(ks); 
//use keys to create SSLSoket 
ssl = SSLContext.getInstance("TLS"); 
ssl.init(
    clientKeyManager.getKeyManagers(), trustManager.getTrustManagers(), 
    SecureRandom.getInstance("SHA1PRNG") 
); 
+0

您正在使用哪个端口? – Frank

它们是不同的协议,并且都在传输加密内容时使用。

请阅读OSI Model的网络协议,因为这解释了每个协议相对于彼此的位置。

TCP是第4层(传输层)的一部分,而TLS是第6层(表示层)的一部分。

不确定您在代码段中使用了哪个客户端。但是用Jersey/CXF做这件事通常只需设置http.protocols的值。此链接有一些有用的信息:https://superuser.com/questions/747377/enable-tls-1-1-and-1-2-for-clients-on-java-7