Truststore และ Keystore Definition


คำตอบ:


268

ที่เก็บคีย์มีไพรเวตคีย์และใบรับรองที่มีพับลิกคีย์ที่สอดคล้องกัน

Truststore มีใบรับรองจากบุคคลอื่นที่คุณคาดหวังว่าจะสื่อสารด้วยหรือจากผู้ออกใบรับรองที่คุณไว้วางใจให้ระบุบุคคลอื่น


12
แม้ว่าสิ่งนี้ควรเป็นจริงในทางปฏิบัติ แต่พวกเขาสามารถ (และบ่อยครั้ง) ได้เหมือนกัน คุณสามารถนำเข้าคีย์ส่วนตัวและใบรับรองสาธารณะใน [java home] / jre / lib / security / cacerts เริ่มต้น "truststore" ยูทิลิตี้ keytool ไม่ได้สร้างความแตกต่างในสองคำศัพท์เฉพาะในประเภทร้านค้า (เช่น - JKS กับ PKCS12) สำหรับเรื่องนั้น Java ทำสิ่งเดียวกันในซอร์สโค้ด คุณสร้าง java.security.KeyStore และใช้ตัวจัดการความน่าเชื่อถือเพื่อจัดการใบรับรองในนั้น แต่ไม่มีคลาส TrustStore

4
Java ไม่ได้TrustStore ต่อ se หรือฉันไม่พบมันในเอกสาร java (เช่นjava.security.TrustStore) เมื่อเราต้องการเชื่อถือผู้ให้บริการออกใบรับรองจะเชื่อถือได้ผ่านKeyStore(และKeyStoreถูกส่งผ่านไปยังTrustManagerFactory)
jww

5
เป็นมูลค่าการกล่าวขวัญว่าKeyStore.load(InputStream is, char[] password)( เอกสาร ) สามารถใช้รหัสผ่านเป็นโมฆะและจากนั้นจะให้การเข้าถึงใบรับรองสาธารณะ นั่นคือรหัสที่ต้องการเรียกดู truststore ไม่จำเป็นต้องรู้รหัสผ่าน (สำหรับเหตุผลที่ดีมาก!)
xverges

83
  1. ที่เก็บคีย์มีไพรเวตคีย์ คุณต้องการเพียงสิ่งนี้หากคุณเป็นเซิร์ฟเวอร์หรือหากเซิร์ฟเวอร์ต้องการการตรวจสอบสิทธิ์ไคลเอ็นต์

  2. truststore มีใบรับรอง CA ที่ไว้วางใจ หากใบรับรองของเซิร์ฟเวอร์ของคุณได้รับการลงนามโดย CA ที่ได้รับการยอมรับ truststore เริ่มต้นที่มาพร้อมกับ JRE จะเชื่อถือได้แล้ว (เพราะเชื่อถือ trusts CA ที่เชื่อถือได้อยู่แล้ว) ดังนั้นคุณไม่จำเป็นต้องสร้างของคุณเองหรือเพิ่มอะไรเข้าไป จาก JRE

แหล่ง


73

ในการจับมือ 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

ที่มา: http://javarevisited.blogspot.ch


31

คุณอาจสนใจเขียนบทความจาก Sun ซึ่งเป็นส่วนหนึ่งของเอกสาร JSSE มาตรฐาน:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

โดยทั่วไปแล้ว trust store จะใช้เพื่อเก็บคีย์สาธารณะเท่านั้นเพื่อการตรวจสอบเช่นกับการตรวจสอบ X.509 เพื่อจุดประสงค์ในการจัดการมันเป็นเรื่องปกติที่ผู้ดูแลระบบหรือนักพัฒนาจะสามารถทำให้ทั้งสองเป็นร้านเดียวได้


1
ให้ 404 น่าเสียดาย
Chris Beach

@ChrisBeach - อัปเดตลิงค์ไปยังลิงค์ที่ถูกต้องบนไซต์ Oracle
Peter Mularien

1
truststore ใช้เพื่อเก็บใบรับรองผู้ลงนามที่เชื่อถือได้
มาร์ควิสแห่ง Lorne

9

ใน 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 ไฟล์เดียวจะช่วยแยกความแตกต่างทางตรรกะระหว่างใบรับรองของคุณเอง (และคีย์ส่วนตัวที่เกี่ยวข้อง) และใบรับรองของผู้อื่น เมื่อต้องการให้การป้องกันเพิ่มเติมสำหรับไพรเวตคีย์ของคุณให้จัดเก็บไว้ในที่เก็บคีย์ด้วยการเข้าถึงที่ จำกัด และจัดให้มีใบรับรองที่เชื่อถือได้ในที่เก็บคีย์ที่เข้าถึงได้แบบสาธารณะถ้าจำเป็น


4
  1. ความแตกต่างที่สำคัญประการแรกระหว่าง trustStore และ keyStore คือ TrustStore ถูกใช้โดย TrustManager เพื่อตรวจสอบว่าการเชื่อมต่อระยะไกลควรเชื่อถือได้หรือไม่ KeyStore ถูกใช้จาก KeyManager เพื่อตัดสินใจว่าควรส่งข้อมูลรับรองความถูกต้องใดไปยังโฮสต์ระยะไกล

  2. ความแตกต่างอีกประการหนึ่งคือ keyStore ในทางทฤษฎีมีคีย์ส่วนตัวที่จำเป็นต่อเมื่อคุณใช้เซิร์ฟเวอร์ในการเชื่อมต่อ SSL หรือคุณเปิดใช้งานการตรวจสอบสิทธิ์ลูกค้าทางฝั่งเซิร์ฟเวอร์และในทางกลับกัน trustStore เก็บกุญแจสาธารณะหรือใบรับรองจาก CA (Certificate Authorities) ไว้วางใจการเชื่อมต่อปาร์ตี้ระยะไกลหรือ SSL

    ในความเป็นจริงคุณสามารถจัดเก็บในแฟ้มเดียวกันกุญแจทั้งภาครัฐและเอกชนที่ได้รับว่าเป็นเครื่องมือในการจัดการไฟล์เหล่านั้นเหมือนกัน (keytool) ดังนั้นคุณสามารถใช้ไฟล์เดียวสำหรับทั้งวัตถุประสงค์ แต่คุณอาจไม่ควร

  3. อย่างน้อยใน 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.