【问题标题】:How to make stealth ssl handshake in Java如何在 Java 中进行隐形 ssl 握手
【发布时间】:2012-08-08 02:59:34
【问题描述】:

我需要在程序中进行 ssl 握手,以获取有关远程服务器的一些信息,例如公钥和密码套装。我知道一种叫做隐形握手的东西,它不会完成握手,但会像我提到的那样获得所需的信息。任何机构都可以解释如何在 Java 中做到这一点。我试图搜索但无法找到确切的具体方法。

【问题讨论】:

  • 为什么?除非服务器需要客户端证书,否则您可以使用内置 SSL 类与它完成正常的 SSL 握手,然后获取所有 SSL 会话详细信息。

标签: java sockets ssl network-programming


【解决方案1】:

Stelath 模式对此不确定,但我曾经做过类似下面的事情来从服务器检索证书链

import java.io.IOException;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class GetCertificates {

public static void main(String[] args) throws NoSuchAlgorithmException,    KeyManagementException, IOException{
    String host="google.com";
    int port = 443;
    SSLContext ssl = SSLContext.getInstance("TLS");
    ssl.init(null, new TrustManager[]{new SimpleX509TrustManager()}, null);
    SSLSocketFactory factory = ssl.getSocketFactory();
    SSLSocket socket = (SSLSocket) factory.createSocket(host,port);
    SSLSession session = socket.getSession();
    javax.security.cert.X509Certificate[] certs = session.getPeerCertificateChain();
    System.out.println(certs[certs.length-1].getSubjectDN());
    // you can display certificates info here and also cipher suites
    session.getCipherSuite();
    session.invalidate();
}
}
class SimpleX509TrustManager implements X509TrustManager {
public void checkClientTrusted(
        X509Certificate[] cert, String a)
        throws CertificateException {
}

public void checkServerTrusted(
        X509Certificate[] cert, String a)
        throws CertificateException {
}

public X509Certificate[] getAcceptedIssuers() {
    return new X509Certificate[0];
}
}

【讨论】:

    【解决方案2】:

    隐身?没听说过这个。
    您可以将javax.net.ssl.HandShakeCompletedListener 注册到您的 ssl 客户端套接字以获取证书等,但 握手完成后

    javax.net.ssl.HandShakeCompletedListener 是一个实现的接口 任何希望收到完成通知的班级 给定 SSLSocket 连接上的 SSL 协议握手。

    您还可以通过SSLEngine 处理握手数据。

    学习JSSE Ref guide

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2016-09-27
      • 2016-01-26
      相关资源
      最近更新 更多