Different types of keystore in Java -- Overview

  Pi Ke        2014-08-18 02:09:54       140,367        4          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

Keystore คือสิ่งอำนวยความสะดวกในการจัดเก็บกุญแจเข้ารหัสและใบรับรอง พวกมันมักใช้ใน การสื่อสาร SSL เพื่อพิสูจน์ตัวตนของเซิร์ฟเวอร์และไคลเอ็นต์ Keystore อาจเป็นไฟล์หรืออุปกรณ์ฮาร์ดแวร์ สามารถจัดเก็บรายการได้สามประเภทใน keystore ขึ้นอยู่กับประเภทของ keystore

รายการทั้งสามประเภทคือ:

PrivateKey : นี่คือประเภทของกุญแจที่ใช้ใน การเข้ารหัสแบบไม่สมมาตร มักได้รับการปกป้องด้วยรหัสผ่านเนื่องจากความอ่อนไหว สามารถใช้เพื่อลงนามลายเซ็นดิจิทัลได้เช่นกัน

Certificate : ใบรับรองประกอบด้วยกุญแจสาธารณะที่สามารถระบุตัวแบบที่อ้างสิทธิ์ในใบรับรองได้ มักใช้เพื่อตรวจสอบตัวตนของเซิร์ฟเวอร์ บางครั้งก็ใช้เพื่อระบุไคลเอ็นต์เมื่อมีการร้องขอ

SecretKey : รายการกุญแจที่ใช้ใน การเข้ารหัสแบบสมมาตร

ขึ้นอยู่กับว่า keystore สามารถจัดเก็บรายการใดและ keystore สามารถจัดเก็บรายการได้อย่างไร มี keystore หลายประเภทใน Java: JKS, JCEKS, PKCS12, PKCS11 และ DKS คุณสามารถค้นหาบทนำของ keystore เหล่านี้ได้ที่ คำอธิบายสถาปัตยกรรมการเข้ารหัสของ Java ของ Oracle

ต่อไป เราจะดูภาพรวมของประเภท keystore เหล่านี้

JKS, Java Key Store คุณสามารถค้นหาไฟล์นี้ได้ที่ sun.security.provider.JavaKeyStore keystore นี้เฉพาะ Java โดยปกติจะมีนามสกุล jks keystore ประเภทนี้สามารถมีกุญแจส่วนตัวและใบรับรอง แต่ไม่สามารถใช้เพื่อจัดเก็บกุญแจลับได้ เนื่องจากเป็น keystore เฉพาะของ Java จึงไม่สามารถใช้ในภาษาการเขียนโปรแกรมอื่นๆ ได้ กุญแจส่วนตัวที่จัดเก็บใน JKS ไม่สามารถดึงออกมาใน Java ได้

JCEKS, JCE key store (Java Cryptography Extension KeyStore) เป็นส่วนย่อยของ JKS ที่มีอัลกอริธึมที่รองรับมากขึ้น เป็นมาตรฐานขั้นสูงที่ Sun เพิ่มในภายหลัง คุณสามารถค้นหาไฟล์นี้ได้ที่ com.sun.crypto.provider.JceKeyStore keystore นี้มีนามสกุล jceks รายการที่สามารถใส่ใน keystore JCEKS ได้แก่ กุญแจส่วนตัว กุญแจลับ และใบรับรอง keystore นี้ให้การป้องกันที่แข็งแกร่งยิ่งขึ้นสำหรับกุญแจส่วนตัวที่จัดเก็บโดยใช้การเข้ารหัส Triple DES

ผู้ให้บริการของ JCEKS คือ SunJCE ได้รับการแนะนำใน Java 1.4 ดังนั้นก่อน Java 1.4 จึงสามารถใช้ JKS เท่านั้น

PKCS12 นี่คือประเภท keystore มาตรฐานที่สามารถใช้ใน Java และภาษาอื่นๆ ได้ คุณสามารถค้นหาการใช้งาน keystore นี้ได้ที่ sun.security.pkcs12.PKCS12KeyStore โดยปกติจะมีนามสกุล p12 หรือ pfx คุณสามารถจัดเก็บกุญแจส่วนตัว กุญแจลับ และใบรับรองในประเภทนี้ได้ ซึ่งแตกต่างจาก JKS กุญแจส่วนตัวใน keystore PKCS12 สามารถดึงออกมาใน Java ได้ ประเภทนี้สามารถเคลื่อนย้ายได้และสามารถใช้งานร่วมกับไลบรารีอื่นๆ ที่เขียนด้วยภาษาอื่นๆ เช่น C, C++ หรือ C# ได้

ปัจจุบันประเภท keystore เริ่มต้นใน Java คือ JKS กล่าวคือ รูปแบบ keystore จะเป็น JKS หากคุณไม่ระบุ -storetype ในขณะที่สร้าง keystore ด้วย keytool อย่างไรก็ตาม ประเภท keystore เริ่มต้นจะเปลี่ยนเป็น PKCS12 ใน Java 9 เนื่องจากความเข้ากันได้ที่เพิ่มขึ้นเมื่อเทียบกับ JKS คุณสามารถตรวจสอบประเภท keystore เริ่มต้นได้ที่ไฟล์ $JRE/lib/security/java.security:

PKCS11 นี่คือประเภท keystore ฮาร์ดแวร์ ให้ส่วนต่อประสานสำหรับไลบรารี Java เพื่อเชื่อมต่อกับอุปกรณ์ keystore ฮาร์ดแวร์ เช่น SafeNet's Luna, nCipher หรือ Smart card คุณสามารถค้นหาการใช้งานนี้ได้ที่ sun.security.pkcs11.P11KeyStore เมื่อคุณโหลด keystore คุณไม่จำเป็นต้องสร้างผู้ให้บริการเฉพาะด้วยการกำหนดค่าเฉพาะ keystore นี้สามารถจัดเก็บกุญแจส่วนตัว กุญแจลับ และใบรับรองได้ เมื่อโหลด keystore รายการจะถูกดึงมาจาก keystore แล้วแปลงเป็นรายการซอฟต์แวร์

DKS, Domain KeyStore คือ keystore ของ keystore มันจะสรุปคอลเลกชันของ keystore ที่นำเสนอเป็น keystore เชิงตรรกะเดียว ในตัวมันเองไม่ได้เป็น keystore ประเภท keystore ใหม่นี้ได้รับการแนะนำใน Java 8 มีคลาสใหม่ DomainLoadStoreParameter ที่เกี่ยวข้องอย่างใกล้ชิดกับ DKS

keystore นี้ตั้งอยู่ที่ sun.security.provider.DomainKeyStore.java

Windows-MY นี่คือประเภท keystore บน Windows ที่ระบบปฏิบัติการ Windows จัดการ มันจัดเก็บกุญแจส่วนตัวและใบรับรองของผู้ใช้ซึ่งสามารถใช้เพื่อดำเนินการเข้ารหัสต่างๆ เช่น การตรวจสอบลายเซ็น การเข้ารหัสข้อมูล เป็นต้น เนื่องจากเป็น keystore ชนิดเนทีฟ Java จึงไม่มี API ทั่วไปในการเข้าถึง Oracle จึงให้ API แยกต่างหากเพื่อเข้าถึง keystore Windows-MY -- SunMSCAPI คลาสผู้ให้บริการสำหรับ API นี้คือ sun.security.mscapi.SunMSCAPI

BKS, BoucyCastle keystore คือรูปแบบ keystore ที่ให้บริการโดยผู้ให้บริการไลบรารีการเข้ารหัส Java ของบุคคลที่สามยอดนิยม -- BouncyCastle มันเป็น keystore ที่คล้ายกับ JKS ที่ให้บริการโดย Oracle JDK แต่รองรับการจัดเก็บกุญแจลับ กุญแจส่วนตัว และใบรับรอง มักใช้ในการพัฒนาแอปพลิเคชันบนมือถือ

ใน Java มีตัวเลือกไม่กี่อย่างเกี่ยวกับวิธีการประมวลผล keystore การเขียนโค้ด Java เป็นตัวเลือกอย่างชัดเจน นอกเหนือจากนี้แล้ว เครื่องมือที่มาพร้อมกับ JDK ยังสามารถใช้ได้เช่นกัน เรียกว่า keytool

keytool เป็นเครื่องมือบรรทัดคำสั่ง สามารถใช้เพื่อสร้าง keystore สร้างกุญแจ นำเข้าและส่งออกใบรับรอง เป็นต้น สำหรับรายการคำสั่งทั้งหมดที่ keytool รองรับ คุณสามารถดูได้ที่ แนวทาง keytool ของ Oracle

หากคุณใช้ IBM JDK จะมีเครื่องมืออีกอย่างหนึ่งที่สามารถใช้ได้ เรียกว่า ikeyman ikeyman เป็นเครื่องมือ GUI ที่สามารถให้มุมมองที่ตรงไปตรงมาของ keystore รายการใน keystore กุญแจและใบรับรองสามารถสร้างโดยใช้ ikeyman ได้เช่นกัน เป็นเครื่องมือที่ผู้ดูแลระบบใช้บ่อย

ด้านล่างนี้คือรายละเอียดของแต่ละ keystore ที่รองรับใน Java

JAVA  KEYSTORE  OVERVIEW  JKS  PKCS12  JCEKS  PKCS11  DKS  BKS 

       

  RELATED


  4 COMMENTS


Zeef [Reply]@ 2014-08-21 08:49:10
Hello, I want to subscribe for this webpage to take most recent updates, therefore where can i do it please assist.
Pi Ke [Reply]@ 2014-08-21 09:56:24

Sorry we don't have subscribe function enabled now for our articles. However, you can subscribe to our RSS feed if you want at the header of our site. We will consider to add this function in the near future.

Anonymous [Reply]@ 2016-06-04 14:15:55

Very nice and complete summary. One important omission, though: BKCS (Bouncy Castle), used in Android.

Ke Pi [Reply]@ 2016-06-15 12:22:04

Yes, there are other keystore types introduced by third parties which we will not cover here. 



  RANDOM FUN

When a system is not QA tested