ความแตกต่างระหว่าง keystore และ truststore คืออะไร
ความแตกต่างระหว่าง keystore และ truststore คืออะไร
คำตอบ:
ที่เก็บคีย์มีไพรเวตคีย์และใบรับรองที่มีพับลิกคีย์ที่สอดคล้องกัน
Truststore มีใบรับรองจากบุคคลอื่นที่คุณคาดหวังว่าจะสื่อสารด้วยหรือจากผู้ออกใบรับรองที่คุณไว้วางใจให้ระบุบุคคลอื่น
TrustStore
ต่อ se หรือฉันไม่พบมันในเอกสาร java (เช่นjava.security.TrustStore
) เมื่อเราต้องการเชื่อถือผู้ให้บริการออกใบรับรองจะเชื่อถือได้ผ่านKeyStore
(และKeyStore
ถูกส่งผ่านไปยังTrustManagerFactory
)
ที่เก็บคีย์มีไพรเวตคีย์ คุณต้องการเพียงสิ่งนี้หากคุณเป็นเซิร์ฟเวอร์หรือหากเซิร์ฟเวอร์ต้องการการตรวจสอบสิทธิ์ไคลเอ็นต์
truststore มีใบรับรอง CA ที่ไว้วางใจ หากใบรับรองของเซิร์ฟเวอร์ของคุณได้รับการลงนามโดย CA ที่ได้รับการยอมรับ truststore เริ่มต้นที่มาพร้อมกับ JRE จะเชื่อถือได้แล้ว (เพราะเชื่อถือ trusts CA ที่เชื่อถือได้อยู่แล้ว) ดังนั้นคุณไม่จำเป็นต้องสร้างของคุณเองหรือเพิ่มอะไรเข้าไป จาก JRE
ในการจับมือ SSL วัตถุประสงค์ของtruststore คือการตรวจสอบข้อมูลประจำตัวและวัตถุประสงค์ของการเก็บคีย์คือการให้การรับรอง
keystore
keyStore ใน Java เก็บคีย์ส่วนตัวและใบรับรองที่สอดคล้องกับพับลิกคีย์และต้องการถ้าคุณเป็นเซิร์ฟเวอร์ SSL หรือ SSL ต้องการการพิสูจน์ตัวตนไคลเอ็นต์
truststore
TrustStore เก็บใบรับรองจากบุคคลที่สามแอปพลิเคชัน Java ของคุณสื่อสารหรือใบรับรองที่ลงนามโดย CA (หน่วยงานออกใบรับรองเช่น Verisign, Thawte, Geotrust หรือ GoDaddy) ซึ่งสามารถใช้เพื่อระบุบุคคลที่สาม
TrustManager
TrustManager พิจารณาว่าการเชื่อมต่อระยะไกลควรเชื่อถือได้หรือไม่เช่นว่าบุคคลที่อยู่ห่างไกลเป็นผู้ที่อ้างสิทธิ์และ KeyManager ตัดสินใจว่าข้อมูลรับรองความถูกต้องใดที่ควรส่งไปยังโฮสต์ระยะไกลสำหรับการตรวจสอบความถูกต้องระหว่างการจับมือ SSL
หากคุณเป็นเซิร์ฟเวอร์ SSL คุณจะใช้ไพรเวทคีย์ระหว่างอัลกอริธึมการแลกเปลี่ยนคีย์และส่งใบรับรองที่สอดคล้องกับพับลิกคีย์ของคุณไปยังไคลเอนต์ใบรับรองนี้ได้มาจาก keyStore บนฝั่งไคลเอ็นต์ SSL ถ้าเขียนเป็น Java จะใช้ใบรับรองที่เก็บไว้ใน trustStore เพื่อตรวจสอบตัวตนของเซิร์ฟเวอร์ ใบรับรอง SSL เป็นกันมากที่สุดมาเป็น.cerไฟล์ที่ถูกเพิ่มเข้ามาใน keystore หรือ truststore โดยใช้ยูทิลิตีการจัดการใด ๆ ที่สำคัญเช่นkeytool
คุณอาจสนใจเขียนบทความจาก Sun ซึ่งเป็นส่วนหนึ่งของเอกสาร JSSE มาตรฐาน:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
โดยทั่วไปแล้ว trust store จะใช้เพื่อเก็บคีย์สาธารณะเท่านั้นเพื่อการตรวจสอบเช่นกับการตรวจสอบ X.509 เพื่อจุดประสงค์ในการจัดการมันเป็นเรื่องปกติที่ผู้ดูแลระบบหรือนักพัฒนาจะสามารถทำให้ทั้งสองเป็นร้านเดียวได้
ใน Java ความแตกต่างระหว่าง keystore และ truststore คืออะไร
นี่คือคำอธิบายจากเอกสาร Java ที่Java Secure Socket ขยาย (JSSE) คู่มืออ้างอิง ฉันไม่คิดว่ามันจะบอกอะไรคุณต่างจากที่คนอื่นพูด แต่มันจะให้การอ้างอิงอย่างเป็นทางการ
keystore / truststore
ที่เก็บคีย์คือฐานข้อมูลของวัสดุสำคัญ วัสดุหลักใช้สำหรับวัตถุประสงค์ที่หลากหลายรวมถึงการตรวจสอบความถูกต้องและความสมบูรณ์ของข้อมูล มีที่เก็บคีย์หลายชนิดรวมถึง PKCS12 และ JKS ของ Oracle
โดยทั่วไปข้อมูล keystore สามารถแบ่งออกเป็นสองประเภท: รายการคีย์และรายการใบรับรองที่เชื่อถือได้ รายการคีย์ประกอบด้วยข้อมูลเฉพาะตัวของเอนทิตีและไพรเวตคีย์และสามารถนำมาใช้เพื่อวัตถุประสงค์ด้านการเข้ารหัสที่หลากหลาย ในทางตรงกันข้ามรายการใบรับรองที่เชื่อถือได้จะมีเพียงกุญแจสาธารณะเท่านั้นนอกเหนือจากข้อมูลประจำตัวของนิติบุคคล ดังนั้นรายการใบรับรองที่เชื่อถือได้ไม่สามารถใช้ในกรณีที่จำเป็นต้องใช้คีย์ส่วนตัวเช่นใน javax.net.ssl.KeyManager ในการใช้ JDK ของ JKS ที่เก็บคีย์อาจมีทั้งรายการคีย์และรายการใบรับรองที่เชื่อถือได้
truststore เป็นที่เก็บคีย์ที่ใช้เมื่อทำการตัดสินใจเกี่ยวกับสิ่งที่ไว้วางใจ ถ้าคุณได้รับข้อมูลจากเอนทิตีที่คุณเชื่อถือแล้วและถ้าคุณสามารถตรวจสอบได้ว่าเอนทิตีนั้นเป็นข้อมูลที่อ้างว่าเป็นคุณก็สามารถสันนิษฐานได้ว่าข้อมูลนั้นมาจากเอนทิตีนั้นจริงๆ
รายการควรถูกเพิ่มไปยัง truststore เฉพาะถ้าผู้ใช้เชื่อถือเอนทิตีนั้น โดยการสร้างคู่คีย์หรือโดยการนำเข้าใบรับรองผู้ใช้จะให้ความไว้วางใจกับรายการนั้น รายการใด ๆ ใน truststore ถือว่าเป็นรายการที่เชื่อถือได้
อาจเป็นประโยชน์ที่จะมีไฟล์ที่เก็บคีย์สองไฟล์: ไฟล์หนึ่งมีเพียงรายการคีย์ของคุณและอีกไฟล์หนึ่งมีรายการใบรับรองที่เชื่อถือได้ของคุณรวมถึงใบรับรอง CA อดีตมีข้อมูลส่วนตัวในขณะที่ข้อมูลหลังไม่มี การใช้สองไฟล์แทนไฟล์ keystore ไฟล์เดียวจะช่วยแยกความแตกต่างทางตรรกะระหว่างใบรับรองของคุณเอง (และคีย์ส่วนตัวที่เกี่ยวข้อง) และใบรับรองของผู้อื่น เมื่อต้องการให้การป้องกันเพิ่มเติมสำหรับไพรเวตคีย์ของคุณให้จัดเก็บไว้ในที่เก็บคีย์ด้วยการเข้าถึงที่ จำกัด และจัดให้มีใบรับรองที่เชื่อถือได้ในที่เก็บคีย์ที่เข้าถึงได้แบบสาธารณะถ้าจำเป็น
ความแตกต่างที่สำคัญประการแรกระหว่าง trustStore และ keyStore คือ TrustStore ถูกใช้โดย TrustManager เพื่อตรวจสอบว่าการเชื่อมต่อระยะไกลควรเชื่อถือได้หรือไม่ KeyStore ถูกใช้จาก KeyManager เพื่อตัดสินใจว่าควรส่งข้อมูลรับรองความถูกต้องใดไปยังโฮสต์ระยะไกล
ความแตกต่างอีกประการหนึ่งคือ keyStore ในทางทฤษฎีมีคีย์ส่วนตัวที่จำเป็นต่อเมื่อคุณใช้เซิร์ฟเวอร์ในการเชื่อมต่อ SSL หรือคุณเปิดใช้งานการตรวจสอบสิทธิ์ลูกค้าทางฝั่งเซิร์ฟเวอร์และในทางกลับกัน trustStore เก็บกุญแจสาธารณะหรือใบรับรองจาก CA (Certificate Authorities) ไว้วางใจการเชื่อมต่อปาร์ตี้ระยะไกลหรือ SSL
ในความเป็นจริงคุณสามารถจัดเก็บในแฟ้มเดียวกันกุญแจทั้งภาครัฐและเอกชนที่ได้รับว่าเป็นเครื่องมือในการจัดการไฟล์เหล่านั้นเหมือนกัน (keytool) ดังนั้นคุณสามารถใช้ไฟล์เดียวสำหรับทั้งวัตถุประสงค์ แต่คุณอาจไม่ควร
อย่างน้อยใน Mac OSX ของฉันเริ่มต้น keystore เป็น${user.home}/.keystore
และเริ่มต้น truststore /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
คือ
หากคุณต้องการที่จะแทนที่พวกเขาที่คุณควรเพิ่มพารามิเตอร์ JVM
หรือ-Djavax.net.ssl.keyStore /path/to/keyStore
-Djavax.net.ssl.trustStore /path/to/trustStore
คุณอาจจำเป็นต้องตั้งรหัสผ่าน keyStore ในกรณีที่
java.security.UnrecoverableKeyException: Password must not be
null
ใช้พารามิเตอร์
-Djavax.net.ssl.trustStorePassword=password
หรือ-Djavax.net.ssl.trustStorePassword=password
ข้อมูลหลัก:
http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html