Sim*_*ang 29 java ssl https httpclient ssl-certificate
我需要从Java网站上的SSL证书中提取到期日期,应该支持可信和自签名证书,例如:1.trusted https://github.com 2.self-signed https://mms.nw .RU /
我已经将一些代码复制为:
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SSLTest {
public static void main(String [] args) throws Exception {
// configure the SSLContext with a TrustManager
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
URL url = new URL("https://github.com");//https://mms.nw.ru
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
System.out.println(conn.getResponseCode());
Certificate[] certs = conn.getServerCertificates();
for (Certificate cert :certs){
System.out.println(cert.getType());
System.out.println(cert);
}
conn.disconnect();
}
private static class DefaultTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:
如何从证书解析到期日期,在我的代码中,toString()确实输出了日期,但很难解析.
如何确定证书链,例如带链3的github证书,我如何知道从哪个证书中获取到期日期?
use*_*421 26
如何解析证书的到期日期
把它投到一个X509Certificate电话getNotAfter().
如何确定证书链,例如带链的github证书
你有它.Certificate[]就像在Javadoc中所说的那样,这就是阵列.
我怎么知道从哪个证书到期日?
阅读Javadoc."对等方自己的证书首先跟随任何证书颁发机构".
但是我不知道你为什么这么做.Java应该已经为您完成了所有工作.
请丢掉那些不安全且不正确的TrustManager实现.处理自签名证书的正确方法是将它们导入客户端信任库.还请丢弃不安全的HostnameVerifier,并使用默认的或安全的.如果您不希望它安全,为什么要使用HTTPS呢?
| 归档时间: |
|
| 查看次数: |
28773 次 |
| 最近记录: |