tls指纹 java
时间: 2023-11-10 17:03:00 浏览: 40
TLS指纹是指TLS证书的指纹,可以用于验证证书的有效性和完整性。在Java中,可以使用javax.net.ssl包中的X509TrustManager接口来获取TLS证书的指纹。具体实现可以参考以下代码:
```java
import java.security.MessageDigest;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class MyTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
// do nothing
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
for (X509Certificate cert : chain) {
byte[] fingerprint = getCertificateSHA1Fingerprint(cert);
System.out.println("TLS fingerprint: " + bytesToHex(fingerprint));
}
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
private byte[] getCertificateSHA1Fingerprint(X509Certificate cert) throws CertificateEncodingException {
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
throw new CertificateEncodingException("SHA-1 not supported");
}
byte[] der = cert.getEncoded(); md.update(der);
return md.digest();
}
private String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
```