Java中的密码学。 证书类别

哈Ha! 我向您介绍了Jakob Jenkov的最终文章“ Java证书”的译文,该文章是针对那些希望学习Java密码学基础知识的初学者一系列文章


目录:


  1. Java密码学
  2. Java密码
  3. 留言摘要
  4. Mac电脑
  5. 签章
  6. 密钥对
  7. 密钥生成器
  8. 密钥对生成器
  9. 密钥库
  10. 按键工具
  11. 证明书
  12. 证书工厂
  13. 证书路径

Java证书


证书类( java.security.cert.Certificate )是用于证明实体属于例如用户的证书。 证书类实例包含名称和有关其标识的对象的其他信息,以及可能包含来自证书颁发机构(CA)的数字签名。 Certificate类是一个抽象类,因此,您可以使用Certificate作为变量的类型,并且您的变量将始终指向子类。 此类具有一个子类X509Certificate ,它表示X.509证书,该证书在HTTPS和TLS协议中用作证书。


获取证书实例


您可以通过以下方式获取证书实例:



有关获取证书实例的更多信息,请参见这两个指南。


getEncoded()


证书的getEncoded()方法以字节数组形式返回证书的编码版本。 例如,如果证书是X509证书,则返回的字节数组将包含证书实例的X.590编码版本(ASN.1 DER)。 这是使用getEncoded()方法的示例:


 byte[] encodedCertificate = certificate.getEncoded(); 

getPublicKey()


getPublicKey()证书方法返回此证书实例的公钥。 这是一个示例getPublicKey()方法:


 PublicKey certificatePublicKey = certificate.getPublicKey(); 

getType()


getType()方法返回证书实例的类型。 示例getType()


 String certificateType = certificate.getType(); 

验证()


证书类包含三个verify()方法。 这些方法可用于验证证书是否确实已使用与预期公钥相对应的私钥签名。 这是证书验证的示例:


 //     (  !) PublicKey expectedPublicKey = ... ; try{ certificate.verify(expectedPublicKey); } catch (InvalidKeyException e) { //        } catch (NoSuchAlgorithmException | NoSuchProviderException | SignatureException | CertificateException e){ // -     } 

verify()方法不返回值。 如果测试失败,将InvalidKeyException 。 如果没有引发异常,则可以认为证书实例已验证。


Java CertificateFactory(证书工厂


CertificateFactory类( java.security.cert.CertificateFactory )能够根据X.509编码证书(ASN.1 DER)的二进制数据创建证书实例( Certificate )。 CertificateFactory还可以创建CertPath实例。 CertPath是一个证书链,其中每个证书都由该链中的下一个证书签名。


创建CertificateFactory的实例


在创建Certificate实例之前,必须创建一个CertificateFactory实例。 一个例子:


 CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 

本示例创建一个CertificateFactory实例,该实例能够实例化X.509证书( X509CertificateCertificate的子类)。


创建证书实例


通过创建CertificateFactory的实例,可以开始创建Certificate实例。 这是通过调用generateCertificate()方法完成的。 调用generateCertificate()方法的示例:


 InputStream certificateInputStream = new FileInputStream("my-x509-certificate.crt"); Certificate certificate = certificateFactory.generateCertificate(certificateInputStream); 

创建一个CertPath实例


CertificateFactory也可以实例化CertPath 。 通过调用generateCertPath()方法创建一个CertPath实例:


 InputStream certificateInputStream = new FileInputStream("my-x509-certificate-chain.crt"); CertPath certPath = certificateFactory.generateCertPath(certificateInputStream); 

Java CertPath(证书链)


CertPath类( java.security.cert.CertPath )表示一个证书链( Certificate对象),其中每个证书都是链中下一个证书的数字签名者。 CertPath类通常用于验证身份证书以及来自签署证书的证书颁发机构(CA)的证书。


获取CertPath的实例


通常,从证书工厂( CertificateFactory CertPathBuilder )获取CertPath实例。


getCertificates()


一旦获得CertPath实例,就可以通过调用getCertificates()方法来获取CertPath组成的Certificate实例。 这是从CertPath实例获取证书的示例:


 List<Certificate> certificates = certPath.getCertificates(); 

getType()


getType()方法返回一个字符串,该字符串指示此CertPath实例中包含什么类型的证书(例如X.509)。 这是通过getType()方法获取CertPath类型的示例:


 String type = certPath.getType(); 

Source: https://habr.com/ru/post/zh-CN446888/


All Articles