我想用代码方式查看ca证书到期时间,以下是我的代码,可以显示日期,但是和实际的截止日期不一致

我想用代码方式查看ca证书到期时间,以下是我的代码,可以显示日期,但是和实际的截止日期不一致

希望各位大牛帮忙看一下问题出在哪,多谢啦

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);
    }
}

阅读 3.7k
2 个回答

这些大公司的网站通常不止一张证书, 有的有很多,不同的连接方式你可能收到的证书不一样,你可以查看证书签名和频发机构,是不一样的.

新手上路,请多包涵

解决了吗老铁,我遇到同样的问题,同样的闹心

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题