我们可以使用Java代码来获取Badssl.com的证书链,然后与在浏览器中获得的证书链进行比较。这将有助于确定服务器是否在返回不同的证书链。
以下是Java代码示例:
import java.io.IOException;
import java.security.cert.Certificate;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
public class CertificateUtils {
public static void main(String[] args) {
compareCertificateChains("https://badssl.com/");
}
public static void compareCertificateChains(String url) {
List javaChain = getCertificateChain(url);
List browserChain = getCertificateChainViaBrowser(url);
if (javaChain.equals(browserChain)) {
System.out.println("The certificate chain is the same when accessed via Java and browser.");
} else {
System.out.println("The certificate chain is different when accessed via Java and browser.");
}
}
public static List getCertificateChain(String url) {
List certChain = new ArrayList<>();
try {
HttpsURLConnection conn = (HttpsURLConnection) new java.net.URL(url).openConnection();
conn.connect();
SSLSession session = conn.getSSLSession();
Certificate[] certs = session.getPeerCertificates();
for (Certificate cert : certs) {
if (cert instanceof X509Certificate) {
certChain.add(getCertificateFingerprint((X509Certificate) cert));
}
}
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return certChain;
}
public static List getCertificateChainViaBrowser(String url) {
List certChain = new ArrayList<>();
try (SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket()) {
socket.connect(new java
上一篇:BADSQL查询显示所有ID
下一篇:Badstate:fielddoesnotexistwithintheDocumentSnapshotPlatformfluttererroreventhoughfieldexists