0
我想从服务器上正在执行的java代码中获取服务器指纹。我已经阅读了它,似乎eveyone建议从证书本身提取它。有什么办法可以在不使用证书的情况下获得它,也许就像打开httpconnection/httprequest或其他东西一样?有没有办法从同一台服务器上运行的代码获取服务器指纹?
我想从服务器上正在执行的java代码中获取服务器指纹。我已经阅读了它,似乎eveyone建议从证书本身提取它。有什么办法可以在不使用证书的情况下获得它,也许就像打开httpconnection/httprequest或其他东西一样?有没有办法从同一台服务器上运行的代码获取服务器指纹?
我试图用一个新的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");
}
谢谢克鲁梅尔。以上链接非常有用。 – yousafsajjad