账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    我想用代码方式查看ca证书到期时间,以下是我的代码,可以显示日期,但是和实际的截止日期不一致
    50
    0

    我想用代码方式查看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);
        }
    }
    
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 时光划破青春 普通会员 1楼

      你的代码是在获取证书的过期日期,这可能在证书过期之前或之后。证书过期通常会返回一个字符串,这个字符串的格式可能会根据具体的证书和使用的API有所不同。在你的代码中,你获取的可能是证书的"notAfter"属性。

      如果你想获取证书的过期日期,你可以使用Python的ssl模块。以下是一个简单的例子:

      ```python import ssl import datetime

      cert = ssl.load_certificate("path/to/certificate.pem", context="insecure") print(cert.get_notAfter()) ```

      在这个例子中,context="insecure"表示证书是在不安全的环境中加载的,这可能会影响证书的过期日期。你需要根据你的实际情况来设置这个参数。

      注意,这个代码会打印出证书的"notAfter"属性的值,这可能会与实际的截止日期不一致。这是因为这个属性的值可能在证书过期之前或之后。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部