上传的证书文件,如何判断这个证书是否满足X509标准格式的呢?
下面是我阅读jdk源码,总结出的解析步骤。
jdk版本:jdk11
方法的入口
这是整个方法的起点,下面的步骤是根据这里方法调用跟踪到的,需要注意的是,如果是接口,我都是找的是jdk版本的实现。
解析步骤
申明: 这些步骤可能跳过了一些不关键的代码,比如 缓存 解析的证书等。如有需要最好在去源码里追踪一下。
- 解析前提:证书必须要是DER-encoding规则,并且可以以二进制或者Base64的方式满足规则。如果是base64,那么证书会有-----BEGIN CERTIFICATE----- 的证书头部和类似的证书尾部。
- 取出证书文件内容中,头部和尾部之间的数据部分。
- 按照如下框的格式,分别读取出所有的字段
Certificate::=SEQUENCE{
tbsCertificate TBSCertificate, // 具体证书内容
signatureAlgorithm AlgorithmIdentifier, // 签名算法标识
signatureValue BIT STRING // 签名值
}
- 对比签名算法具体证书内容里面的签名算法标识和最外层的签名算法标识是否一致。
- 最后,检验subject是否为空,如果为空那么会有一些情况是允许为空的,这一部分需要做一个校验。