0

サーバー自体で実行されている Java コードからサーバーの拇印を取得したいと考えています。私はそれについて何かを読みましたが、証明書自体からそれを抽出することを提案しているようです。httpconnection/httprequest などを開くなど、証明書を使用せずに取得する方法はありますか?

4

2 に答える 2

1
  1. SSL 接続を使用してサーバーから証明書をダウンロードします。ここに例があります
  2. 拇印 (ハッシュ) を計算する
于 2012-10-11T20:19:15.503 に答える
0

私は新しい TrustManager を使用しようとしていましたが、そこで壊れていました。私はそれを削除し、残りのコードを使用しましたが、うまくいきました。

static X509TrustManager tm = new X509TrustManager()
{

    @Override
    public void checkClientTrusted(X509Certificate[] arg0, String arg1)
            throws CertificateException
    {
        // TODO Auto-generated method stub
    }

    @SuppressWarnings("synthetic-access")
    @Override
    public void checkServerTrusted(X509Certificate[] arg0, String arg1)
            throws CertificateException
    {


    }

    @Override
    public X509Certificate[] getAcceptedIssuers()
    {
        // TODO Auto-generated method stub
        return null;
    }

    // public static X509Certificate[] getChain() { return chain; }

};


TrustManager[] tm1 = { tm };
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tm1, new SecureRandom());
sslFactory = sslContext.getSocketFactory();

sslSocket = (SSLSocket) sslFactory.createSocket("localhost", port);
// timeout: 10secs
sslSocket.setSoTimeout(10 * 1000); 
sslSocket.startHandshake();

// add certificate to keystore
X509Certificate[] vCenterServerCert = chain;

 for (int i = 0; i < vCenterServerCert.length; i++) {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] der = vCenterServerCert[i].getEncoded();
            md.update(der);
            byte[] digest = md.digest();

            System.out.print("-----BEGIN CERTIFICATE-----\n");
            System.out.print(hexify(digest));
            //System.out.print(new sun.misc.BASE64Encoder().encode(servercerts[i].getEncoded()));
            System.out.print("\n-----END CERTIFICATE-----\n");

        }
于 2012-10-16T15:21:48.707 に答える