التشفير في جافا. فئة الشهادة

مرحبا يا هبر! أقدم لكم ترجمة المقال الأخير "شهادة جافا" لجاكوب جينكوف من سلسلة من المقالات للمبتدئين الذين يرغبون في تعلم أساسيات التشفير في جافا.


جدول المحتويات:


  1. تشفير جافا
  2. تشفير جافا
  3. MessageDigest
  4. ماك
  5. توقيع
  6. KeyPair
  7. KeyGenerator
  8. KeyPairGenerator
  9. تخزين المفاتيح
  10. Keytool
  11. شهادة
  12. CertificateFactory
  13. CertPath

شهادة جافا


فئة الشهادة ( java.security.cert.Certificate ) هي شهادة تشهد على أن الكيان ينتمي ، على سبيل المثال ، إلى مستخدم. يحتوي مثيل فئة الشهادة على اسم ومعلومات أخرى حول الكائن الذي يحدده ، وكذلك ، ربما ، توقيع رقمي من مرجع مصدق (CA). فئة Certificate هي فئة مجردة ، لذلك ، يمكنك استخدام Certificate كنوع المتغير ، وسيشير المتغير الخاص بك دائمًا إلى فئة فرعية. تحتوي هذه الفئة على فئة فرعية واحدة - شهادة X509Certificate ، والتي تمثل شهادة X.509 ، والتي يتم استخدامها كشهادة في بروتوكولي HTTPS و TLS.


الحصول على شهادة المثيل


يمكنك الحصول على مثيل الشهادة بالطرق التالية:


  • من CertificateFactory .
  • من keystore .

راجع هذين الدليلين لمزيد من المعلومات حول الحصول على نسخة الشهادة.


getCoded ()


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 ) قادرة على إنشاء مثيلات الشهادة ( Certificate ) من البيانات الثنائية للشهادات المشفرة X.509 (ASN.1 DER). يمكن أيضًا إنشاء CertPath مثيلات CertPath . CertPath هي سلسلة شهادات ، حيث يتم توقيع كل شهادة بواسطة الشهادة التالية في هذه السلسلة.


إنشاء مثيل لشهادة CertificateFactory


قبل أن تتمكن من إنشاء مثيلات Certificate ، يجب عليك إنشاء مثيل CertificateFactory . مثال:


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

ينشئ هذا المثال مثيلًا CertificateFactory ، قادرًا على إنشاء مثيل لشهادة X.509 (شهادة X509Certificate هي فئة فرعية من Certificate ).


إنشاء مثيل الشهادة


بإنشاء مثيل CertificateFactory ، يمكنك البدء في إنشاء مثيلات Certificate . يتم ذلك عن طريق استدعاء الأسلوب generateCertificate() . مثال على استدعاء الأسلوب generateCertificate() :


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

إنشاء مثيل لـ CertPath


CertificateFactory يمكن أيضًا إنشاء مثيل لـ CertPath . CertPath إنشاء مثيل CertPath عن طريق استدعاء الأسلوب CertPath generateCertPath() :


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

Java CertPath (سلسلة الشهادات)


CertPath فئة CertPath ( java.security.cert.CertPath ) سلسلة من الشهادات (كائنات Certificate ) ، حيث تكون كل شهادة موقّعًا رقميًا للشهادة التالية في السلسلة. عادةً ما CertPath استخدام فئة CertPath للتحقق من شهادة الهوية ، جنبًا إلى جنب مع شهادات من المراجع المصدقة (CAs) التي وقعت الشهادة.


الحصول على مثيل من CertPath


عادة ، CertPath الحصول على مثيل CertPath من مصنع الشهادات ( CertificateFactory CertPathBuilder ).


getCertificates ()


بمجرد الحصول على مثيل CertPath ، يمكنك الحصول على مثيلات Certificate التي يتكون منها CertPath عن طريق استدعاء الأسلوب getCertificates() . فيما يلي مثال على الحصول على شهادات من مثيل CertPath :


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

getType ()


إرجاع الأسلوب getType() سلسلة تشير إلى نوع الشهادات (على سبيل المثال ، X.509) المضمنة في مثيل CertPath هذا. فيما يلي مثال على الحصول على نوع CertPath عبر getType() :


 String type = certPath.getType(); 

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


All Articles