Cơ bản về Java Keytool: Làm việc với Kho khóa Java
Java Keytool là một công cụ quản lý khóa và certificate được sử dụng để thao tác các Kho khóa Java và có trong Java. Kho khóa Java là một containers certificate ủy quyền hoặc certificate public key và thường được các ứng dụng dựa trên Java sử dụng để mã hóa, xác thực và cung cấp qua HTTPS. Các mục nhập của nó được bảo vệ bằng password kho khóa. Mục nhập kho khóa được xác định bằng bí danh và nó bao gồm các khóa và certificate tạo thành một chuỗi tin cậy. Hướng dẫn kiểu ghi chú này cung cấp tham chiếu nhanh đến các lệnh keytool
thường hữu ích khi làm việc với Java Keystores. Điều này bao gồm việc tạo và sửa đổi các Kho khóa Java để chúng được dùng với các ứng dụng Java của bạn.
Cách sử dụng Hướng dẫn này:
- Nếu bạn không quen thuộc với các yêu cầu ký certificate (CSR), hãy đọc phần CSR trong cheat sheets OpenSSL của ta
- Hướng dẫn này ở dạng ghi chú đơn giản - các đoạn mã dòng lệnh độc lập
- Chuyển đến bất kỳ phần nào có liên quan đến nhiệm vụ bạn đang cố gắng hoàn thành (Gợi ý: sử dụng menu Nội dung ở phía dưới bên trái hoặc chức năng Tìm của trình duyệt của bạn)
- Hầu hết các lệnh là một dòng được mở rộng thành nhiều dòng (sử dụng ký hiệu
\
) cho rõ ràng
Tạo và nhập mục nhập kho khóa
Phần này bao gồm các lệnh Java Keytool liên quan đến việc tạo các cặp khóa và certificate cũng như nhập certificate .
Tạo khóa trong repository khóa mới / hiện có
Sử dụng phương pháp này nếu bạn muốn sử dụng HTTP (HTTP qua TLS) để bảo mật ứng dụng Java của bạn . Thao tác này sẽ tạo một cặp khóa mới trong Kho khóa Java mới hoặc hiện có, được dùng để tạo CSR và lấy certificate SSL từ Tổ chức phát hành certificate .
Lệnh này tạo cặp khóa RSA 2048 bit, dưới alias ( domain
) được chỉ định, trong file kho khóa được chỉ định ( keystore.jks
):
keytool -genkeypair \ -alias domain \ -keyalg RSA \ -keystore keystore.jks
Nếu kho khóa được chỉ định chưa tồn tại, nó sẽ được tạo sau khi cung cấp thông tin được yêu cầu. Thao tác này sẽ nhắc nhập password kho khóa (mới hoặc hiện có), tiếp theo là dấu nhắc Tên phân biệt (đối với private key ), sau đó là password private key mong muốn.
Tạo CSR cho private key hiện tại
Sử dụng phương pháp này nếu bạn muốn tạo CSR mà bạn có thể gửi đến CA để yêu cầu cấp certificate SSL có chữ ký của CA. Nó yêu cầu kho khóa và alias đã tồn tại; bạn có thể sử dụng lệnh trước đó đảm bảo điều này.
Lệnh này tạo CSR ( domain.csr
) được ký bởi private key được xác định bởi alias ( domain
) trong keystore.jks
( keystore.jks
):
keytool -certreq \ -alias domain \ -file domain.csr \ -keystore keystore.jks
Sau khi nhập password của kho khóa, CSR sẽ được tạo.
Nhập certificate đã ký / root / trung gian
Sử dụng phương pháp này nếu bạn muốn nhập certificate đã ký, ví dụ: certificate được CA ký, vào kho khóa của bạn; nó phải trùng với private key tồn tại trong alias được chỉ định. Bạn cũng có thể sử dụng lệnh này để nhập các certificate gốc hoặc certificate trung gian mà CA của bạn có thể yêu cầu để hoàn thành một chuỗi tin cậy. Chỉ cần chỉ định một alias duy nhất, chẳng hạn như root
thay vì domain
và certificate mà bạn muốn nhập.
Lệnh này nhập certificate ( domain.crt
) vào kho khóa ( keystore.jks
), dưới alias ( domain
) được chỉ định. Nếu bạn đang nhập certificate đã ký, certificate đó phải tương ứng với private key trong alias được chỉ định:
keytool -importcert \ -trustcacerts -file domain.crt \ -alias domain \ -keystore keystore.jks
Bạn sẽ được yêu cầu nhập password kho khóa, sau đó xác nhận hành động nhập.
Lưu ý: Bạn cũng có thể sử dụng lệnh để nhập certificate của CA vào $JAVA_HOME/jre/lib/security/cacerts
Java của bạn, certificate này thường được đặt trong $JAVA_HOME/jre/lib/security/cacerts
giả sử $JAVA_HOME
là nơi cài đặt JRE hoặc JDK của bạn.
Tạo certificate tự ký trong repository khóa mới / hiện có
Sử dụng lệnh này nếu bạn muốn tạo certificate tự ký cho các ứng dụng Java của bạn . Đây thực sự là lệnh tương tự được sử dụng để tạo một cặp khóa mới, nhưng với thời hạn hiệu lực được chỉ định bằng ngày.
Lệnh này tạo một cặp khóa RSA 2048-bit, hợp lệ trong 365
ngày, dưới alias ( domain
) được chỉ định, trong file kho khóa được chỉ định ( keystore.jks
):
keytool -genkey \ -alias domain \ -keyalg RSA \ -validity 365 \ -keystore keystore.jks
Nếu kho khóa được chỉ định chưa tồn tại, nó sẽ được tạo sau khi cung cấp thông tin được yêu cầu. Thao tác này sẽ nhắc nhập password kho khóa (mới hoặc hiện có), tiếp theo là dấu nhắc Tên phân biệt (đối với private key ), sau đó là password private key mong muốn.
Xem các mục nhập trong repository khóa
Phần này bao gồm việc liệt kê nội dung của Kho khóa Java, chẳng hạn như xem thông tin certificate hoặc xuất certificate .
Liệt kê dấu fingerprint certificate kho khóa
Lệnh này liệt kê các file tham chiếu SHA của tất cả các certificate trong repository khóa ( keystore.jks
), dưới các alias tương ứng của chúng:
keytool -list \ -keystore keystore.jks
Bạn sẽ được yêu cầu nhập password của kho khóa. Bạn cũng có thể hạn chế kết quả cho một alias cụ thể bằng cách sử dụng tùy chọn -alias domain
, trong đó “miền” là tên alias .
Liệt kê Nội dung Kho khóa dài dòng
Lệnh này liệt kê thông tin chi tiết về các mục nhập trong repository khóa ( keystore.jks
), bao gồm độ dài chuỗi certificate , file tham chiếu của các certificate trong chuỗi, tên phân biệt, số sê-ri và ngày tạo / hết hạn, dưới alias tương ứng của chúng:
keytool -list -v \ -keystore keystore.jks
Bạn sẽ được yêu cầu nhập password của kho khóa. Bạn cũng có thể hạn chế kết quả cho một alias cụ thể bằng cách sử dụng tùy chọn -alias domain
, trong đó “miền” là tên alias .
Lưu ý: Bạn cũng có thể sử dụng lệnh này để xem certificate nào có trong $JAVA_HOME/jre/lib/security/cacerts
Java của bạn, certificate này thường nằm trong $JAVA_HOME/jre/lib/security/cacerts
giả sử $JAVA_HOME
là nơi cài đặt JRE hoặc JDK của bạn.
Sử dụng Keytool để xem thông tin certificate
Lệnh này in ra thông tin chi tiết về file certificate ( certificate.crt
), bao gồm dấu fingerprint của nó, tên phân biệt của chủ sở hữu và tổ chức phát hành và khoảng thời gian có hiệu lực của nó:
keytool -printcert \ -file domain.crt
Bạn sẽ được yêu cầu nhập password kho khóa.
Giấy chứng nhận xuất khẩu
Lệnh này xuất certificate được mã hóa DER binary ( domain.der
), được liên kết với alias ( domain
), trong repository khóa ( keystore.jks
):
keytool -exportcert -alias domain -file domain.der -keystore keystore.jks
Bạn sẽ được yêu cầu nhập password kho khóa. Nếu bạn muốn chuyển đổi certificate được mã hóa DER sang mã hóa PEM, hãy làm theo cheat sheets OpenSSL của ta .
Sửa đổi Kho khóa
Phần này bao gồm việc sửa đổi các mục trong Kho khóa Java, chẳng hạn như xóa hoặc đổi tên alias .
Thay đổi password kho khóa
Lệnh này được sử dụng để thay đổi password của kho khóa ( keystore.jks
):
keytool -storepasswd \ -keystore keystore.jks
Bạn sẽ được yêu cầu nhập password hiện tại, sau đó là password mới. Bạn cũng có thể chỉ định password mới trong lệnh bằng cách sử dụng tùy chọn -new newpass
, trong đó “newpass” là password .
Xóa alias
Lệnh này được sử dụng để xóa alias ( domain
) trong repository khóa ( keystore.jks
):
keytool -delete \ -alias domain \ -keystore keystore.jks
Bạn sẽ được yêu cầu nhập password kho khóa.
Đổi tên alias
Lệnh này sẽ đổi tên alias ( domain
) thành alias đích ( newdomain
) trong repository khóa ( keystore.jks
):
keytool -changealias \ -alias domain \ -destalias newdomain \ -keystore keystore.jks
Bạn sẽ được yêu cầu nhập password kho khóa.
Kết luận
Điều đó sẽ bao gồm cách hầu hết mọi người sử dụng Java Keytool để thao tác các Kho khóa Java của họ. Nó có nhiều công dụng khác mà không được đề cập ở đây, vì vậy hãy hỏi hoặc đề xuất những cách sử dụng khác trong phần comment .
Hướng dẫn này dựa trên version kho khóa đi kèm với bản cập nhật Java 1.7.0 65. Để được trợ giúp cài đặt Java trên Ubuntu, hãy làm theo hướng dẫn này .
Các tin liên quan