JDK cung cấp một công cụ dòng lệnh -- keytool để xử lý việc tạo khóa và chứng chỉ. Công cụ này có một tập hợp các tùy chọn có thể được sử dụng để tạo khóa, tạo chứng chỉ, nhập khóa, cài đặt chứng chỉ và xuất chứng chỉ, v.v. Trong hướng dẫn này, chúng ta sẽ hướng dẫn cách tạo chuỗi chứng chỉ bằng keytool. Nếu bạn muốn hiểu cách tạo chuỗi chứng chỉ bằng lập trình, vui lòng tham khảo Tạo chứng chỉ trong Java -- Chuỗi chứng chỉ.
Để bắt đầu, trước tiên chúng ta tạo một cặp khóa sẽ được sử dụng làm CA, khóa riêng tư của nó sẽ được sử dụng để ký chứng chỉ mà nó cấp.
keytool -genkeypair -alias ca -keystore test.jks -dname "CN=CA" -storepass password -keypass password -ext bc=ca:true
Lưu ý ở đây có một phần mở rộng với BasicaContraint được tạo ra để cho thấy đó là một CA.
Sau đó, tạo một cặp khóa mà chứng chỉ của nó sẽ được CA ở trên ký.
keytool -genkeypair -alias leaf -keystore test.jks -dname "CN=Leaf" -storepass password -keypass password
Tiếp theo, cần tạo một yêu cầu chứng chỉ cho chứng chỉ "CN=Leaf".
keytool -certreq -keystore test.jks -storepass password -alias leaf -file leaf.csr
Bây giờ tạo chứng chỉ với yêu cầu chứng chỉ được tạo ở trên.
keytool -gencert -keystore test.jks -storepass password -alias ca -infile leaf.csr -outfile leaf.cer
Một tệp chứng chỉ đầu ra leaf.cer sẽ được tạo. Bây giờ hãy xem nội dung của nó là gì.
keytool -printcert -file leaf.cer
Chứng chỉ sẽ trông như thế này:
Owner: CN=Leaf Issuer: CN=CA Serial number: 49fdb896 Valid from: Thu Dec 17 20:44:51 CST 2015 until: Wed Mar 16 20:44:51 CST 2016 Certificate fingerprints: MD5: EE:C8:78:72:69:C0:45:2C:DA:C6:E5:A9:6C:F9:A6:33 SHA1: DC:21:3A:7A:6B:BE:55:2A:24:0D:A0:F3:7B:FA:AD:B7:B3:E9:6B:88 SHA256: 78:11:E2:42:37:66:16:1D:02:02:03:1B:36:91:FC:C9:98:10:28:43:B6:0E:A2:63:34:93:9F:77:EA:D9:15:AB Signature algorithm name: SHA1withDSA Version: 3 Extensions: #1: ObjectId: 2.5.29.35 Criticality=false AuthorityKeyIdentifier [ KeyIdentifier [ 0000: 24 67 26 EE 9F 42 BE BF CE 9E 8B 4D 8E 1E BD AF $g&..B.....M.... 0010: 97 82 3D E4 ..=. ] ] #2: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 23 19 D0 58 48 6B 41 4B 0E 24 42 3A FF 60 38 69 #..XHkAK.$B:.`8i 0010: F1 63 11 12 .c.. ] ]
Từ chứng chỉ, chúng ta có thể thấy người phát hành của nó là "CN=CA".
Chứng chỉ này có thể được nhập vào một kho khóa hoặc kho lưu trữ đáng tin cậy khác để nó có thể được sử dụng để xác minh danh tính máy chủ trong tương lai.
keytool -importcert -keystore test.jks -storepass password -file leaf.cer
Hoặc nó có thể được cài đặt vào kho khóa gốc để trở thành chứng chỉ lá của chuỗi chứng chỉ cho alias leaf.
keytool -importcert -keystore test.jks -storepass password -file leaf.cer -alias leaf
Sau khi cài đặt chứng chỉ, bạn sẽ thấy mục nhập với alias leaf sẽ có một chuỗi hai chứng chỉ.
Alias name: leaf Creation date: Dec 17, 2015 Entry type: PrivateKeyEntry Certificate chain length: 2 Certificate[1]: Owner: CN=Leaf Issuer: CN=CA Serial number: 49fdb896 Valid from: Thu Dec 17 20:44:51 CST 2015 until: Wed Mar 16 20:44:51 CST 2016 Certificate fingerprints: MD5: EE:C8:78:72:69:C0:45:2C:DA:C6:E5:A9:6C:F9:A6:33 SHA1: DC:21:3A:7A:6B:BE:55:2A:24:0D:A0:F3:7B:FA:AD:B7:B3:E9:6B:88 SHA256: 78:11:E2:42:37:66:16:1D:02:02:03:1B:36:91:FC:C9:98:10:28:43:B6:0E:A2:63:34:93:9F:77:EA:D9:15:AB Signature algorithm name: SHA1withDSA Version: 3 Extensions: #1: ObjectId: 2.5.29.35 Criticality=false AuthorityKeyIdentifier [ KeyIdentifier [ 0000: 24 67 26 EE 9F 42 BE BF CE 9E 8B 4D 8E 1E BD AF $g&..B.....M.... 0010: 97 82 3D E4 ..=. ] ] #2: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 23 19 D0 58 48 6B 41 4B 0E 24 42 3A FF 60 38 69 #..XHkAK.$B:.`8i 0010: F1 63 11 12 .c.. ] ] Certificate[2]: Owner: CN=CA Issuer: CN=CA Serial number: 768422fa Valid from: Thu Dec 17 20:35:40 CST 2015 until: Wed Mar 16 20:35:40 CST 2016 Certificate fingerprints: MD5: 19:FC:D0:AA:59:EA:52:DC:35:35:65:46:0A:AF:91:4F SHA1: BA:17:1B:33:95:4E:1C:7B:68:B0:4C:EE:1C:D8:F4:6A:EE:25:8E:B0 SHA256: 99:5B:90:82:99:8D:79:FA:AA:E7:72:B1:C6:76:FE:2A:65:5F:B7:EF:C9:3C:A4:55:C6:27:E2:62:D3:01:99:79 Signature algorithm name: SHA1withDSA Version: 3 Extensions: #1: ObjectId: 2.5.29.19 Criticality=false BasicConstraints:[ CA:true PathLen:2147483647 ] #2: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 24 67 26 EE 9F 42 BE BF CE 9E 8B 4D 8E 1E BD AF $g&..B.....M.... 0010: 97 82 3D E4 ..=. ] ]
Với hướng dẫn này, bạn sẽ có thể tạo bất kỳ loại chứng chỉ hoặc chuỗi chứng chỉ nào bạn muốn. Rõ ràng là, nếu bạn muốn tạo thứ gì đó có thể được sử dụng trong môi trường sản xuất, bạn cần tìm một CA đáng tin cậy như VeriSign.
Đây chỉ là một hướng dẫn hướng dẫn cách tạo chuỗi chứng chỉ. Nếu bạn muốn biết về kho khóa, bạn có thể tham khảo Các loại kho khóa khác nhau trong Java -- Tổng quan.
For a whole day i was using open_ssl and then found this article - made what i needed in 1/10 of time and it is actually working for me.
Thanks!