Server:
TLS Version: v1.2
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256
Client:
JRE 1.7
Tôi nhận được báo lỗi dưới đây khi tôi cố gắng để kết nối với máy chủ từ khách hàng thông qua SSL trực tiếp:Enable TLSv1.2 và TLS_RSA_WITH_AES_256_CBC_SHA256 Cipher Suite
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
Mã dưới đây cho phép TLSv1.2
Set<String> enabledTLSSet = new HashSet<String>(Arrays.asList(sslsocket.getEnabledProtocols()));
enabledTLSSet.add("TLSv1.2");
sslsocket.setEnabledProtocols(enabledTLSSet.toArray(new String[enabledTLSSet.size()]));
mã dưới đây cho phép TLS_RSA_WITH_AES_256_CBC_SHA256 Cipher Suite:
Set<String> enabledCipherSuitesSet = new HashSet<String>(Arrays.asList(sslsocket.getEnabledCipherSuites()));
enabledCipherSuitesSet.add("TLS_RSA_WITH_AES_256_CBC_SHA256");
sslsocket.setEnabledCipherSuites(enabledCipherSuitesSet.toArray(new String[enabledCipherSuitesSet.size()]));
Sau khi thực hiện cả hai điều trên từ mã Java, tôi có thể kết nối với máy chủ thành công thông qua SSL.
Có thể bật/buộc TLSv1.2
và TLS_RSA_WITH_AES_256_CBC_SHA256
trong Java 7 mà không thay đổi bất kỳ Mã Java nào thông qua các thuộc tính, tham số hoặc đạo cụ gỡ lỗi không?
Tôi đã thử tất cả các thuộc tính dưới đây trong tất cả các biểu mẫu và kết hợp (bật và tắt) và không thành công.
-Dhttps.protocols=TLSv1.2
-Dhttps.cipherSuites=TLS_RSA_WITH_AES_256_CBC_SHA256
-Ddeployment.security.TLSv1.2=true
tôi đang thực hiện các chương trình tương tự như dưới đây:
java -jar -Dhttps.protocols=TLSv1.2 -Dhttps.cipherSuites=TLS_RSA_WITH_AES_256_CBC_SHA256 Ddeployment.security.TLSv1.2=true -Djavax.net.debug=ssl:handshake SSLPoker.jar <SERVER> 443
SSLPoker chứa mã dưới đây:
package com.ashok.ssl;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;
/**
* Establish a SSL connection to a host and port, writes a byte and prints the response - Ashok Goli. See
* http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services
*/
public class SSLPoke {
/**
* The main method.
* Usage: $java -jar SSLPoker.jar <host> <port>
*
* @param args the arguments
*/
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Usage: " + SSLPoke.class.getName() + " <host> <port>");
System.exit(1);
}
try {
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket =
(SSLSocket) sslsocketfactory.createSocket(args[0], Integer.parseInt(args[1]));
InputStream in = sslsocket.getInputStream();
OutputStream out = sslsocket.getOutputStream();
// Write a test byte to get a reaction :)
out.write(1);
while (in.available() > 0) {
System.out.print(in.read());
}
System.out.println("Successfully connected");
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
Bất kỳ con trỏ làm thế nào để đạt được điều này không có thay đổi mã lệnh Java sẽ được nhiều đánh giá cao.
Bạn không thể thêm bộ mã hóa TLS mà không thêm toàn bộ nhà cung cấp bảo mật, chẳng hạn như Lâu đài Bouncy, thực sự có thể hỗ trợ bộ mã hóa đó. – EJP
Các cài đặt mà tôi cần thực hiện để đạt được điều này là gì? –
Tôi đã thêm TLS và kết nối thành công với Máy chủ bằng mã ở trên. Chỉ cần tìm cách để thực hiện điều đó thông qua cấu hình. –