Kriptografi di Jawa. Kelas Sertifikat

Halo, Habr! Saya mempersembahkan untuk Anda terjemahan artikel terakhir "Java Certificate" oleh Jakob Jenkov dari serangkaian artikel untuk pemula yang ingin mempelajari dasar-dasar kriptografi di Jawa.


Daftar isi:


  1. Kriptografi Jawa
  2. Java cipher
  3. Pesan pesan
  4. Mac
  5. Tanda tangan
  6. Keypair
  7. Keygenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Sertifikat
  12. Pabrik Sertifikat
  13. CertPath

Sertifikat Java


Kelas sertifikat ( java.security.cert.Certificate ) adalah sertifikat yang menyatakan bahwa suatu entitas milik, misalnya, seorang pengguna. Sebuah instance dari kelas sertifikat berisi nama dan informasi lain tentang objek yang diidentifikasi, serta, mungkin, tanda tangan digital dari otoritas sertifikasi (CA). Kelas Certificate adalah kelas abstrak, oleh karena itu, Anda dapat menggunakan Certificate sebagai jenis variabel, dan variabel Anda akan selalu mengarah ke subkelas. Kelas ini memiliki satu subkelas - X509Certificate , yang mewakili sertifikat X.509, yang digunakan sebagai sertifikat dalam protokol HTTPS dan TLS.


Memperoleh Mesin Virtual Sertifikat


Anda bisa mendapatkan contoh sertifikat dengan cara berikut:


  • Dari CertificateFactory .
  • Dari keystore .

Lihat dua panduan ini untuk informasi lebih lanjut tentang cara mendapatkan instance sertifikat.


getEncoded ()


Metode getEncoded() dari sertifikat mengembalikan versi yang disandikan dari sertifikat sebagai array byte. Misalnya, jika sertifikat tersebut adalah sertifikat X509, array byte yang dikembalikan akan berisi versi yang disandikan X.590 dari instance sertifikat (ASN.1 DER). Berikut adalah contoh menggunakan metode getEncoded() :


 byte[] encodedCertificate = certificate.getEncoded(); 

getPublicKey ()


Metode sertifikat getPublicKey() mengembalikan kunci publik dari instance sertifikat ini. Berikut adalah contoh metode getPublicKey() :


 PublicKey certificatePublicKey = certificate.getPublicKey(); 

getType ()


Metode getType() mengembalikan jenis instance sertifikat. Contoh getType() :


 String certificateType = certificate.getType(); 

verifikasi ()


Kelas sertifikat berisi tiga metode verify() . Metode ini dapat digunakan untuk memverifikasi bahwa sertifikat memang ditandatangani dengan kunci pribadi yang sesuai dengan kunci publik yang diharapkan. Berikut ini contoh verifikasi sertifikat:


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

Metode verify() tidak mengembalikan nilai. Jika tes gagal, InvalidKeyException akan InvalidKeyException . Jika tidak ada pengecualian yang dilemparkan, instance sertifikat dapat dianggap diverifikasi.


Java CertificateFactory (Pabrik Sertifikat


Kelas CertificateFactory ( java.security.cert.CertificateFactory ) mampu membuat instance sertifikat ( Certificate ) dari data biner untuk sertifikat yang disandikan X.509 (ASN.1 DER). CertificateFactory juga dapat membuat instance CertPath . CertPath adalah rantai sertifikat, tempat setiap sertifikat ditandatangani oleh sertifikat berikutnya dalam rantai ini.


Membuat instance CertificateFactory


Sebelum Anda dapat membuat instance Certificate , Anda harus membuat instance CertificateFactory . Contoh:


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

Contoh ini menciptakan instance CertificateFactory , yang mampu membuat instantiasi sertifikat X.509 ( X509Certificate adalah subkelas Certificate ).


Buat Instance Sertifikat


Dengan membuat instance CertificateFactory , Anda dapat mulai membuat instance Certificate . Ini dilakukan dengan memanggil metode generateCertificate() . Contoh memanggil metode generateCertificate() :


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

Membuat instance dari CertPath


CertificateFactory juga dapat membuat CertPath . Contoh CertPath dibuat dengan memanggil metode generateCertPath() :


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

Java CertPath (Rantai Sertifikat)


Kelas CertPath ( java.security.cert.CertPath ) mewakili rantai sertifikat (objek Certificate ), di mana setiap sertifikat adalah penandatangan digital dari sertifikat berikutnya dalam rantai. Kelas CertPath biasanya digunakan untuk memverifikasi sertifikat identitas, bersama dengan sertifikat dari otoritas sertifikasi (CA) yang telah menandatangani sertifikat.


Mendapatkan instance dari CertPath


Biasanya, instance CertPath diperoleh dari pabrik sertifikat ( CertificateFactory CertPathBuilder ).


getCertificates ()


Setelah Anda mendapatkan instance CertPath , Anda bisa mendapatkan instance Certificate yang terdiri dari CertPath dengan memanggil metode getCertificates() . Berikut adalah contoh mendapatkan sertifikat dari instance CertPath :


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

getType ()


Metode getType() mengembalikan string yang menunjukkan jenis sertifikat apa (misalnya, X.509) yang terkandung dalam instance CertPath ini. Berikut ini adalah contoh mendapatkan tipe CertPath melalui metode getType() :


 String type = certPath.getType(); 

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


All Articles