Java 手动SSL握手的实现

Java 手动SSL握手的实现,java,android,sockets,ssl,javacard,Java,Android,Sockets,Ssl,Javacard,我需要一些帮助来实现android智能手机和服务器之间的手动ssl握手。 在我的例子中,背景原因是通信的加密/解密。Android只是一个代理,它不应该有关于服务器和我的javacard小程序之间交换什么数据的信息,我的javacard小程序只能与Android设备通信 我的第一个想法是在服务器的ssl端口上建立与服务器的连接,就像普通http一样:(在android中) 然后发送握手信息并等待响应。 这里的问题是,我不知道必须以哪种格式发送参数(比如客户端hello:protocolVersi

我需要一些帮助来实现android智能手机和服务器之间的手动ssl握手。 在我的例子中,背景原因是通信的加密/解密。Android只是一个代理,它不应该有关于服务器和我的javacard小程序之间交换什么数据的信息,我的javacard小程序只能与Android设备通信

我的第一个想法是在服务器的ssl端口上建立与服务器的连接,就像普通http一样:(在android中)

然后发送握手信息并等待响应。 这里的问题是,我不知道必须以哪种格式发送参数(比如客户端hello:protocolVersion、random、sessionID、cipherSuites、compressionmethod)。或者它是否有效

我检查的另一种方式是

javax.net.ssl.SSLSocket

这就使得握手本身。 例如:

 public static void main(final String[] args) throws Exception {
    final SSLContext sslContext = SSLContext.getInstance("TLSv1");
    sslContext.init(null, null, null);
    // getDefault();
    final SSLSocketFactory fac = sslContext.getSocketFactory();
    final SSLSocket socket = (SSLSocket) fac.createSocket("google.de", 443);

    socket.addHandshakeCompletedListener(new HandshakeCompletedListener() {

        @Override
        public void handshakeCompleted(final HandshakeCompletedEvent event) {
        System.out.println("Cipher:" + event.getCipherSuite());
        }
    });
    final String[] ciphers = fac.getSupportedCipherSuites();
    final String[] protocols = { "TLSv1" };
    final SSLParameters params = new SSLParameters(ciphers, protocols);
    params.setNeedClientAuth(false);
    socket.setSSLParameters(params);
    socket.startHandshake();
 }
在这种情况下,所有相关的安全信息(如秘密交换)等都将发生在Android上。。。(细节:我认为SSLSocket本身)这正是我不想要的方式

我希望能够自己将握手参数发送到服务器,并能够捕获服务器的响应,并将其转发到我的javacard小程序。我知道以后我必须自己处理加密

我希望我的问题是可以理解的,以及我为什么需要这个的背景。否则,请给我一个小提示,我会尽我所能完成的信息


提前谢谢

为什么??只需编写一个透明的字节复制代理。无需重新实现控制盘,这将是一项非常重要的任务。感谢您的提示,但通过此代理将发送什么?为了创建SSL连接,必须进行握手,我不知道必须以何种格式发送所有信息。
 public static void main(final String[] args) throws Exception {
    final SSLContext sslContext = SSLContext.getInstance("TLSv1");
    sslContext.init(null, null, null);
    // getDefault();
    final SSLSocketFactory fac = sslContext.getSocketFactory();
    final SSLSocket socket = (SSLSocket) fac.createSocket("google.de", 443);

    socket.addHandshakeCompletedListener(new HandshakeCompletedListener() {

        @Override
        public void handshakeCompleted(final HandshakeCompletedEvent event) {
        System.out.println("Cipher:" + event.getCipherSuite());
        }
    });
    final String[] ciphers = fac.getSupportedCipherSuites();
    final String[] protocols = { "TLSv1" };
    final SSLParameters params = new SSLParameters(ciphers, protocols);
    params.setNeedClientAuth(false);
    socket.setSSLParameters(params);
    socket.startHandshake();
 }