рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАред рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреНрд▓рд╛рд╕

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЛ рдЬрдХреЛрдм рдЬреЗрдирдХреЛрд╡ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рд▓реЗрдЦ "рдЬрд╛рд╡рд╛ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╢реБрд░реБрдЖрддреА рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛:


  1. рдЬрд╛рд╡рд╛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА
  2. рдЬрд╛рд╡рд╛ рд╕рд┐рдлрд░
  3. MessageDigest
  4. рдореИрдХ
  5. рд╣рд╕реНрддрд╛рдХреНрд╖рд░
  6. keypair
  7. Keygenerator
  8. KeyPairGenerator
  9. KeyStore
  10. keytool
  11. рдкреНрд░рдорд╛рдгрдкрддреНрд░
  12. CertificateFactory
  13. CertPath

рдЬрд╛рд╡рд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░


рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╡рд░реНрдЧ ( java.security.cert.Certificate ) рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╣реИ рдЬреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЗрдХрд╛рдИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИред рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╛рдо рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА, рд╕рдВрднрд╡рддрдГ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╛рдзрд┐рдХрд╛рд░реА (CA) рд╕реЗ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ред Certificate рд╡рд░реНрдЧ рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЖрдк Certificate рдХреЛ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХрд╛ рдЪрд░ рд╣рдореЗрд╢рд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИ- X509Certificate рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ, рдЬреЛ X.509 рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ HTTPS рдФрд░ TLS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдПрдХ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЗрди рджреЛ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВред


getEncoded ()


рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ getEncoded() рд╡рд┐рдзрд┐ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдПрдиреНрдХреЛрдбреЗрдб рд╕рдВрд╕реНрдХрд░рдг рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдПрдХ X509 рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╣реИ, рддреЛ рд▓реМрдЯреЗ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЙрджрд╛рд╣рд░рдг (ASN.1 DER) рдХрд╛ X.590 рдПрдиреНрдХреЛрдбреЗрдб рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ 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 рдХреЛ InvalidKeyException рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЬрд╛рд╡рд╛ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ (рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдлреИрдХреНрдЯреНрд░реА)


CertificateFactory рдХреНрд▓рд╛рд╕ ( java.security.cert.CertificateFactory ) рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рд╕реЗ X.509-рдПрдирдХреЛрдбреЗрдб рд╕рд░реНрдЯрд┐рдлрд╝рд┐рдХреЗрдЯ (ASN.1 DER) рдХреЗ рд▓рд┐рдП рд╕рд░реНрдЯрд┐рдлрд╝рд┐рдХреЗрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ ( Certificate ) рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред CertificateFactory рднреА рдмрди рд╕рдХрддреЗ рд╣реИрдВред CertPath рдПрдХ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдЪреЗрди рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкрд░ рдЕрдЧрд▓реЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрддреЗ рд╣реИрдВред


рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛


Certificate рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ CertificateFactory рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:


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

рдпрд╣ рдЙрджрд╛рд╣рд░рдг CertificateFactory рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ X.509 рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ ( X509Certificate Certificate рдСрдл Certificate ) рдХреЛ рддреБрд░рдВрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред


рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ


CertificateFactory рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рдХрд░, рдЖрдк Certificate рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ generateCertificate() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред generateCertificate() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


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

CertPath рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛


CertificateFactory рднреА CertificateFactory рдХреЛ рддреБрд░рдВрдд CertPath рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ CertPath рдЙрджрд╛рд╣рд░рдг CertPath generateCertPath() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


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

рдЬрд╛рд╡рд╛ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ (рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдЪреЗрди)


CertPath рд╡рд░реНрдЧ ( java.security.cert.CertPath ) рдкреНрд░рдорд╛рдг рдкрддреНрд░ ( Certificate рдСрдмреНрдЬреЗрдХреНрдЯ) рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЕрдЧрд▓реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рд╣реИред рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдЕрдереЙрд░рд┐рдЯреА (CA) рдХреЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ CertPath рдХреНрд▓рд╛рд╕ CertPath рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


CertPath рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд░рд╣реА рд╣реИ


рдЖрдорддреМрд░ рдкрд░, рдПрдХ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдлреИрдХреНрдЯреНрд░реА ( CertificateFactory CertPathBuilder ) рд╕реЗ рдПрдХ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЧреЗрдЯ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ ()


рдПрдХ рдмрд╛рд░ рдЖрдкрдХреЛ Certificate рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк Certificate рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ Certificate рдореЗрдВ getCertificates() рд╡рд┐рдзрд┐ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╕реЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


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

getType ()


getType() рд╡рд┐рдзрд┐ рдпрд╣ CertPath рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, X.509) рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдпрд╣ CertPath рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣рд╛рдБ getType() рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ CertPath рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 String type = certPath.getType(); 

Source: https://habr.com/ru/post/hi446888/


All Articles