Tạo kho khoá và kho lưu trữ tin cậy cho đám mây riêng tư phiên bản 4.17.09 trở xuống

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Tài liệu này mô tả cách tạo, sửa đổi và xoá kho khoá cũng như kho lưu trữ tin cậy cho Edge trong Đám mây riêng tư phiên bản 4.17.09 trở về trước.

Giới thiệu về kho khoá và kho lưu trữ tin cậy

Kho khoá và kho khoá xác định kho lưu trữ chứng chỉ bảo mật dùng để mã hoá TLS. Điểm khác biệt chính giữa hai loại mã này là vị trí được sử dụng trong quá trình bắt tay TLS:

  • Kho khoá chứa một chứng chỉ TLS và khoá riêng tư dùng để xác định thực thể trong quá trình bắt tay TLS.

    Trong TLS một chiều, khi một ứng dụng kết nối với điểm cuối TLS trên máy chủ, kho khoá của máy chủ sẽ hiển thị chứng chỉ của máy chủ (chứng chỉ công khai) cho ứng dụng. Sau đó, ứng dụng sẽ xác thực chứng chỉ đó qua một Tổ chức phát hành chứng chỉ (CA), chẳng hạn như Symantec hoặc VeriSign.

    Trong TLS hai chiều, cả ứng dụng và máy chủ đều duy trì một kho khoá có chứng chỉ và khoá riêng tư riêng dùng để xác thực lẫn nhau.
  • Một truststore (kho tin cậy) chứa các chứng chỉ dùng để xác minh các chứng chỉ nhận được trong quá trình trao đổi qua TLS.

    Trong TLS một chiều, bạn không cần phải sử dụng Truststore nếu chứng chỉ được ký bởi một tổ chức phát hành chứng chỉ (CA) hợp lệ. Nếu chứng chỉ mà ứng dụng TLS nhận được được ký bởi một CA hợp lệ, thì ứng dụng sẽ gửi yêu cầu tới CA để xác thực chứng chỉ. Ứng dụng TLS thường sử dụng một kho lưu trữ tin cậy để xác thực các chứng chỉ tự ký nhận được từ máy chủ TLS hoặc các chứng chỉ không do một CA đáng tin cậy ký. Trong trường hợp này, ứng dụng sẽ điền sẵn các chứng chỉ mà ứng dụng tin tưởng vào kho lưu trữ tin cậy của mình. Sau đó, khi ứng dụng nhận được một chứng chỉ máy chủ, chứng chỉ đến sẽ được xác thực theo các chứng chỉ trong kho tin cậy của chứng chỉ đó.

    Ví dụ: ứng dụng TLS kết nối với máy chủ TLS (Bảo mật tầng truyền tải) trong đó máy chủ sử dụng chứng chỉ tự ký. Vì đây là chứng chỉ tự ký nên máy khách không thể xác thực chứng chỉ đó bằng CA. Thay vào đó, ứng dụng sẽ tải trước chứng chỉ tự ký của máy chủ vào kho lưu trữ tin cậy. Sau đó, khi ứng dụng cố gắng kết nối với máy chủ, ứng dụng sẽ sử dụng kho lưu trữ tin cậy để xác thực chứng chỉ nhận được từ máy chủ.

    Đối với TLS hai chiều, cả ứng dụng TLS và máy chủ TLS đều có thể sử dụng kho lưu trữ tin cậy. Bạn cần phải có một kho lưu trữ tin cậy khi thực hiện TLS hai chiều khi Edge đóng vai trò là máy chủ TLS (Bảo mật tầng truyền tải).

Chứng chỉ có thể do một tổ chức phát hành chứng chỉ (CA) cấp hoặc có thể tự ký bằng khoá riêng tư mà bạn tạo. Nếu bạn có quyền truy cập vào một CA, hãy làm theo hướng dẫn do CA của bạn cung cấp để tạo khoá và cấp chứng chỉ. Nếu không có quyền truy cập vào một CA, bạn có thể tạo chứng chỉ tự ký bằng một trong nhiều công cụ miễn phí có sẵn công khai, chẳng hạn như openSSL.

Triển khai kho khoá và kho tin cậy trên Edge

Trên Edge, một kho khoá chứa ít nhất một tệp JAR, trong đó tệp JAR chứa:

  • Chứng chỉ TLS dưới dạng tệp PEM – có thể là chứng chỉ do tổ chức phát hành chứng chỉ (CA) ký, một chuỗi chứng chỉ có chứng chỉ cuối cùng do CA ký hoặc chứng chỉ tự ký.
  • Khoá riêng tư dưới dạng tệp PEM. Edge hỗ trợ kích thước khoá lên đến 2048 bit. Không bắt buộc phải có cụm mật khẩu.

Kho tin cậy tương tự như kho khoá, ngoại trừ việc kho khoá chỉ chứa các chứng chỉ dưới dạng tệp PEM mà không có khoá riêng tư.

Nếu chứng chỉ là một phần của chuỗi, thì kho khoá/tin cậy phải chứa tất cả các chứng chỉ trong chuỗi, dưới dạng tệp PEM riêng lẻ hoặc dưới dạng một tệp duy nhất. Nếu bạn dùng một tệp, thì các chứng chỉ phải theo thứ tự mà theo thứ tự chứng chỉ đầu tiên trong tệp là chứng chỉ dùng cho TLS, theo thứ tự là chuỗi chứng chỉ đến chứng chỉ CA. Bạn phải chèn một dòng trống giữa mỗi chứng chỉ trong tệp.

Edge cung cấp một API mà bạn dùng để tạo kho khoá và kho lưu trữ tin cậy. Các API thực tế thì giống nhau. Điểm khác biệt là khi tạo kho khoá, bạn sẽ truyền tệp JAR chứa chứng chỉ và khoá riêng tư. Khi bạn tạo Truststore, bạn chỉ chuyển chứng chỉ dưới dạng tệp PEM.

Giới thiệu về định dạng của các tệp chứng chỉ và khoá

Các ví dụ trong tài liệu này cho thấy chứng chỉ TLS và khoá được xác định là tệp PEM, tuân theo định dạng X.509. Nếu chứng chỉ hoặc khoá riêng tư của bạn không được xác định bằng tệp PEM, bạn có thể chuyển đổi chứng chỉ hoặc khóa riêng tư của mình thành tệp PEM bằng các tiện ích như openSSL.

Tuy nhiên, nhiều tệp .crt và tệp .key đã có sẵn định dạng PEM. Nếu những tệp này là tệp văn bản và được đặt trong:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

hoặc:

-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----

Sau đó, các tệp sẽ tương thích với định dạng PEM và bạn có thể sử dụng những tệp này trong kho khoá hoặc kho lưu trữ tin cậy mà không cần chuyển đổi chúng thành tệp PEM.

Nếu có chuỗi chứng chỉ và muốn sử dụng chuỗi đó trong kho khoá hoặc kho lưu trữ tin cậy, bạn có thể kết hợp tất cả các chứng chỉ vào một tệp PEM duy nhất với một dòng mới giữa mỗi chứng chỉ. Các chứng chỉ phải theo thứ tự và chứng chỉ cuối cùng phải là chứng chỉ gốc hoặc chứng chỉ trung gian do một chứng chỉ gốc ký:

-----BEGIN CERTIFICATE-----
(Your Primary TLS certificate)
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
(Intermediate certificate)
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
(Root certificate or intermediate certificate signed by a root certificate)
-----END CERTIFICATE-----

Xem thông tin chi tiết về một kho khoá hiện có

Kiểm tra môi trường để tìm mọi kho khoá hiện có bằng cách sử dụng API List Keystores and Truststores (Kho khoá liệt kê và Truststores):

curl -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-u email:password

Đối với khách hàng trên đám mây, kho khoá mặc định được cung cấp cho các tổ chức dùng thử miễn phí trong cả môi trường thử nghiệm và môi trường thực tế. Bạn sẽ thấy các kết quả sau đây cho lệnh gọi này trong cả hai môi trường:

[ "freetrial" ]

Bạn có thể sử dụng kho khoá mặc định này để kiểm thử các API và đẩy các API của mình lên phiên bản chính thức, nhưng bạn thường tạo kho khoá của riêng mình bằng chứng chỉ và khoá của riêng mình trước khi triển khai cho phiên bản chính thức.

Đối với khách hàng dùng dịch vụ Đám mây riêng tư, mảng được trả về sẽ trống cho đến khi bạn tạo kho khoá đầu tiên.

Kiểm tra nội dung của kho khoá bằng cách sử dụng API Get a Keystore or Truststore (Lấy khoá kho khoá hoặc kho tin cậy). Đối với khách hàng sử dụng nền tảng đám mây, bạn sẽ thấy một chứng chỉ TLS (Bảo mật tầng truyền tải) của máy chủ duy nhất. Đây là chứng chỉ mặc định mà Apigee Edge cung cấp cho các tài khoản dùng thử miễn phí.

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \
-u email:password

Câu trả lời sẽ hiển thị như sau:

{
 "certs" : [ "wildcard.apigee.net.crt" ],
 "keys" : [ "freetrial" ],
 "name" : "freetrial"
}

Bạn cũng có thể xem thông tin này trong giao diện người dùng quản lý Edge:

  1. Hãy đăng nhập vào giao diện người dùng quản lý Edge tại https://enterprise.apigee.com (cloud) hoặc http://<ms-ip>:9000 (tại cơ sở), trong đó <ms-ip> là địa chỉ IP của nút Máy chủ quản lý.
  2. Trong trình đơn giao diện người dùng Quản lý Edge, hãy chọn Quản trị > Chứng chỉ TLS.

Lấy thông tin chi tiết về chứng chỉ TLS

Bạn có thể sử dụng API Get Cert Details from a Keystore hoặc Truststore API để xem thông tin chi tiết về các chứng chỉ TLS trong kho khoá, chẳng hạn như ngày hết hạn và nhà phát hành. Trước tiên, hãy lấy tên của chứng chỉ mà bạn quan tâm. Ví dụ này tìm nạp thông tin cho kho khoá có tên là "freetrial".

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \
-u email:password

Câu trả lời mẫu:

{
 "certs" : [ "wildcard.apigee.net.crt" ],
 "keys" : [ "freetrial" ],
 "name" : "freetrial"
}

Sau đó, hãy sử dụng giá trị của thuộc tính chứng chỉ để lấy thông tin chi tiết về chứng chỉ:

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial/certs/wildcard.apigee.net.crt \
-u email:password

Câu trả lời mẫu:

{
 "certInfo" : [ {
   "expiryDate" : "Wed, 23 Apr 2014 20:50:02 UTC",
   "isValid" : "Yes",
   "issuer" : "CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O=&quot;GoDaddy.com, Inc.&quot;, L=Scottsdale, ST=Arizona, C=US",
   "subject" : CN=*.example.apigee.net, OU=Domain Control Validated",
   "subjectAlternativeNames" : ["*.example.apigee.net","*.example.apigee.net" ],
   "validFrom" : "Tue, 15 Apr 2014 09:17:03 UTC",
   "version" : 3
 } ],
 "name" : "example.apigee.net.crt"
}

Bạn cũng có thể xem thông tin này trong giao diện người dùng quản lý Edge:

  1. Hãy đăng nhập vào giao diện người dùng quản lý Edge tại https://enterprise.apigee.com (cloud) hoặc http://<ms-ip>:9000 (tại cơ sở), trong đó <ms-ip> là địa chỉ IP của nút Máy chủ quản lý.
  2. Trong trình đơn giao diện người dùng quản lý Edge, hãy chọn Quản trị > Chứng chỉ TLS (Quản trị viên > Chứng chỉ TLS).

Trong giao diện người dùng Edge, bạn có thể chỉ định mức độ mà Edge cho biết một chứng chỉ sắp hết hạn. Theo mặc định, giao diện người dùng sẽ làm nổi bật mọi chứng chỉ được lên lịch hết hạn trong 10 ngày tiếp theo.

Tạo một kho khoá

Kho khoá là dành riêng cho một môi trường trong tổ chức của bạn, chẳng hạn như môi trường kiểm thử hoặc môi trường thực tế. Do đó, nếu muốn kiểm thử kho khoá trong môi trường thử nghiệm trước khi triển khai kho khoá trong môi trường phát hành chính thức, thì bạn phải tạo kho khoá trong cả hai môi trường.

Quy trình tạo kho khoá gồm 2 bước:

  1. Tạo tệp JAR chứa chứng chỉ và khoá riêng tư của bạn.
  2. Tạo kho khoá rồi tải Tệp JAR lên.

Tạo tệp JAR chứa chứng chỉ và khoá riêng tư của bạn

Tạo tệp JAR bằng khoá riêng tư, chứng chỉ và tệp kê khai của bạn. Tệp JAR phải chứa các tệp và thư mục sau:

/META-INF/descriptor.properties
myCert.pem
myKey.pem

Trong thư mục chứa cặp khoá và chứng chỉ, hãy tạo một thư mục có tên là /META-INF. Sau đó, hãy tạo một tệp có tên là descriptor.properties trong /META-INF với nội dung sau:

certFile={myCertificate}.pem
keyFile={myKey}.pem

Tạo tệp JAR chứa cặp khoá và chứng chỉ của bạn:

jar -cf myKeystore.jar myCert.pem myKey.pem

Thêm description.properties vào tệp JAR của bạn:

jar -uf myKeystore.jar META-INF/descriptor.properties

Tạo kho khoá và tải tệp JAR lên

Để tạo một kho khoá trong một môi trường, bạn chỉ cần chỉ định tên kho khoá cho API Create a Keystore hoặc Truststore (Tạo kho khoá hoặc Truststore). Tên chỉ có thể chứa ký tự chữ-số:

curl -X POST -H "Content-Type: text/xml" \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-d '<KeyStore name="myKeystore"/>' -u email:password

Câu trả lời mẫu:

{
 "certs" : [ ],
 "keys" : [ ],
 "name" : "myKeystore"
}

Sau khi tạo kho khoá được đặt tên trong một môi trường, bạn có thể tải các tệp JAR chứa chứng chỉ và khoá riêng tư lên bằng cách sử dụng API Tải tệp JAR lên kho khoá:

curl -X POST -H "Content-Type: multipart/form-data" \
-F file="@myKeystore.jar" -F password={key_pass} \ "https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/{myKeystore}/keys?alias={key_alias}" \
-u email:password

trong đó tuỳ chọn -F chỉ định đường dẫn đến tệp JAR.

Trong lệnh gọi này, bạn chỉ định 2 tham số truy vấn:

  • alias – Xác định chứng chỉ và khoá trong kho khoá. Khi tạo một máy chủ ảo, bạn sẽ tham chiếu đến chứng chỉ và khoá theo tên bí danh của chứng chỉ và khoá đó.
  • password – Mật khẩu của khoá riêng tư. Hãy bỏ qua tham số này nếu khoá riêng tư không có mật khẩu.

Xác minh rằng kho khoá của bạn đã được tải lên đúng cách:

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystore \
-u email:password

Câu trả lời mẫu:

{  
 "certs" : [ "myCertificate" ],
 "keys" : [ "myKey" ],
 "name" : "myKeystore"
}

Tạo Truststore

Các API mà bạn sử dụng để tạo kho khoá cũng giống như các API được dùng để tạo kho khoá. Điểm khác biệt duy nhất là bạn chuyển tệp chứng chỉ dưới dạng tệp PEM thay vì tệp JAR.

Nếu chứng chỉ là một phần của chuỗi, thì bạn phải tải riêng tất cả các chứng chỉ trong chuỗi lên kho lưu trữ tin cậy hoặc tạo một tệp duy nhất chứa tất cả các chứng chỉ, đưa vào một dòng mới giữa mỗi chứng chỉ trong tệp. Chứng chỉ cuối cùng thường do tổ chức phát hành chứng chỉ ký. Ví dụ: trong Truststore, bạn sẽ tải chứng chỉ ứng dụng khách là client_cert_1 lên và chứng chỉ của nhà phát hành chứng chỉ ứng dụng khách, ca_cert.

Trong quá trình xác thực TLS 2 chiều, việc xác thực ứng dụng sẽ thành công khi máy chủ gửi client_cert_1 đến ứng dụng trong quá trình bắt tay TLS.

Ngoài ra, bạn có chứng chỉ thứ hai, client_cert_2, được ký bằng chính chứng chỉ ca_cert. Tuy nhiên, bạn không được tải client_cert_2 lên kho lưu trữ uy tín. Kho tin cậy vẫn chứa client_cert_1ca_cert.

Khi máy chủ chuyển client_cert_2 trong quá trình bắt tay TLS, yêu cầu sẽ thành công. Điều này là do Edge cho phép xác minh TLS thành công khi client_cert_2 không tồn tại trong kho lưu trữ tin cậy nhưng được ký bằng một chứng chỉ có trong kho tin cậy. Nếu bạn xoá chứng chỉ CA, ca_cert khỏi kho tin cậy, thì quá trình xác minh TLS sẽ không thành công.

Tạo một kho khoá trống trong môi trường bằng cách dùng Create a Keystore hoặc Truststore (Tạo kho khoá hoặc kho tin cậy), chính là API mà bạn sử dụng để tạo kho khoá:

curl -X POST -H "Content-Type: text/xml" -d \
'<KeyStore name="myTruststore"/>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-u email:password

Tải chứng chỉ lên dưới dạng tệp PEM lên Truststore bằng cách sử dụng API Tải chứng chỉ lên Truststore:

curl -X POST -H "Content-Type: multipart/form-data" -F file="@trust.pem" \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myTruststore/certs?alias=myTruststore \
-u email:password

trong đó tùy chọn -F chỉ định đường dẫn đến tệp PEM.

Xoá kho khoá hoặc kho tin cậy

Bạn có thể xoá kho khoá hoặc kho tin cậy bằng cách sử dụng API Xoá kho khoá hoặc kho tin cậy:

curl -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystoreName \
-u email:password

Câu trả lời mẫu:

{
 "certs" : [ ],
 "keys" : [ ],
 "name" : "myKeystoreName"
}

Nếu bạn xoá một kho khoá hoặc kho lưu trữ tin cậy đang được một máy chủ ảo hoặc thiết bị đầu cuối/đích/máy chủ đích sử dụng, thì tất cả lệnh gọi API qua máy chủ ảo hoặc máy chủ đích/đích cuối cùng sẽ không thành công.