如何使用工作证书验证根证书

工作证书对根证书的验证主要是验证根证书的公钥。

已知根证书的格式为pem,工作证书格式为crt,验证流程为

1、读取根证书pem文件,获取根证书公钥;

2、读取工作证书文件,获取工作证书;

3、使用工作证书验证根证书公钥,验证通过,则说明该工作证书是根证书下发的

具体代码片段如下:

/** * 根据根证书获取根证书公钥 * * @param rootCertPath 根证书路径 * @return * @throws Exception */ public static PublicKey getRootCertPublicKeyFromPem(String rootCertPath) throws Exception { FileInputStream fis = new FileInputStream(new File(rootCertPath)); CertificateFactory ft = CertificateFactory.getInstance("X.509"); X509Certificate certificate = (X509Certificate) ft.generateCertificate(fis); PublicKey publicKey = certificate.getPublicKey(); return publicKey; }

// 从读到的工作证书临时缓存文件中获取到工作证书 FileInputStream fis = new FileInputStream(new File(workCertTmpPath)); CertificateFactory ft = CertificateFactory.getInstance("X.509"); X509Certificate certificate = (X509Certificate) ft.generateCertificate(fis);

/** * 使用用户证书验证根证书的公钥,如果验证通过说明这个用户证书是这个根证书签发的,验证不过就不是这个根证书签发的。 * * @param rootCert * @param publicKey 根证书公钥 * @return */ public static boolean verifyRootCerUseWorkCert(X509Certificate workCert, PublicKey publicKey) { if (workCert == null || publicKey == null) { return false; } else { try { workCert.checkValidity(); // to check its valid in time workCert.verify(publicKey); // verify the sig. using the issuers public key // 走到这一步,说明验证成功 return true; } catch (CertificateExpiredException e) { e.printStackTrace(); } catch (CertificateNotYetValidException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (CertificateException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (SignatureException e) { e.printStackTrace(); } // 如果发生异常,则说明验证失败 return false; } }

经验分享 程序员 微信小程序 职场和发展