鍍金池/ 問答/Java  HTML/ 我想用代碼方式查看ca證書到期時(shí)間,以下是我的代碼,可以顯示日期,但是和實(shí)際的截

我想用代碼方式查看ca證書到期時(shí)間,以下是我的代碼,可以顯示日期,但是和實(shí)際的截止日期不一致

我想用代碼方式查看ca證書到期時(shí)間,以下是我的代碼,可以顯示日期,但是和實(shí)際的截止日期不一致

希望各位大牛幫忙看一下問題出在哪,多謝啦

import java.io.*;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class CertificateRemind {

    public static X509Certificate x509Certificate = null;
    public static Process process = null;

    public static void MessageRemind(String url,int port){
        Runtime runtime = Runtime.getRuntime();
        try {
            String connect = "openssl s_client -connect " + url + ":" + port;
            process = runtime.exec(connect);
            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
            x509Certificate = (X509Certificate) certificateFactory.generateCertificate(process.getInputStream());
            System.out.print((x509Certificate.getNotAfter().getTime()-new Date().getTime())/(24*60*60*1000)+"天");

            long date = x509Certificate.getNotAfter().getTime();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
            simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
            System.out.println(simpleDateFormat.format(date));

        } catch (IOException e) {
            e.printStackTrace();
        } catch (CertificateException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)  {
        CertificateRemind.MessageRemind("***.***.***",443);
    }
}

回答
編輯回答
孤星

這些大公司的網(wǎng)站通常不止一張證書, 有的有很多,不同的連接方式你可能收到的證書不一樣,你可以查看證書簽名和頻發(fā)機(jī)構(gòu),是不一樣的.

2017年11月21日 20:39