在这里需要使用X.509 证书的抽象类 X509Certificate 。此类提供了一种访问 X.509 证书所有属性的标准方式。
这些证书被广泛使用以支持 Internet 安全系统中的身份验证和其他功能。常见的应用包括增强保密邮件 (PEM)、传输层安全 (SSL)、用于受信任软件发布的代码签名和安全电子交易 (SET)。
由证书颁发机构 (CA) 来管理和担保这些证书。CA 的工作是创建证书,方法是将数据置于 X.509 标准格式,然后以数字方式签署该数据。CA 充当受信任的第三方,在不能直接通信的主体之间传递信息。CA 证书可由其自身签名,也可由其他 CA 签名,如“根”CA。
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CertificateExpiration {
public static void main(String[] args) {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String jksFilePath = "path/to/your.jks";
String jksPassword = "your_jks_password";
String alias = "your_certificate_alias";
X509Certificate x509Certificate = JksCertificateExpiration(jksFilePath, jksPassword, alias);
// 获取证书的颁发日期
Date notBefore = x509Certificate.getNotBefore();
// 获取证书的截止日期
Date notAfter = x509Certificate.getNotAfter();
// 获取证书的版本号
int version = x509Certificate.getVersion();
// 获取证书的主体(主体标识名)值
String name = x509Certificate.getSubjectX500Principal().getName();
System.out.println("jks颁发日期:" + ft.format(notBefore));
System.out.println("jks截止日期:" + ft.format(notAfter));
System.out.println("jks版本号:" + version);
System.out.println("jks主体值:" + name);
}
/**
* @param certFilePath cert证书路径
* @return X.509 证书所有属性
*/
public static X509Certificate CertCertificateExpiration(String certFilePath) {
try (InputStream inStream = new FileInputStream(certFilePath);) {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
return (X509Certificate) cf.generateCertificate(inStream);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* @param jksFilePath jks证书路径
* @param jksPassword jks证书密码
* @param alias jks证书别名
* @return X.509 证书所有属性
*/
public static X509Certificate JksCertificateExpiration(String jksFilePath, String jksPassword, String alias) {
//try-with-resources会自动关闭FileInputStream,无需手动调用close()方法
try (FileInputStream fis = new FileInputStream(jksFilePath)) {
//密钥和证书的存储设施
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(fis, jksPassword.toCharArray());
// 获取证书
Certificate certificate = keyStore.getCertificate(alias);
// 转换为X509Certificate类型
return (X509Certificate) certificate;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
运行结果
其他证书,欢迎补充!!