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.
Truy cập vào tài liệu Apigee X.
thông tin

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

Giới thiệu về kho khoá và kho khoá tin cậy

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

  • Kho khoá chứa 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ẽ trình bày 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ỉ đó bằng 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ư của riêng mình để dùng cho hoạt động xác thực lẫn nhau.
  • truststore chứa các chứng chỉ dùng để xác minh chứng chỉ nhận được trong quá trình bắt tay TLS.

    Trong TLS một chiều, bạn không cần truststore nếu chứng chỉ được ký bởi một CA hợp lệ. Nếu chứng chỉ mà một ứ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 đến CA để xác thực chứng chỉ. Thông thường, một ứng dụng TLS sẽ sử dụng một kho lưu trữ uy tín để 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 được CA đáng tin cậy ký. Trong trường hợp này, ứng dụng sẽ điền vào truststore bằng các chứng chỉ mà ứng dụng tin tưởng. Sau đó, khi máy khách nhận được chứng chỉ máy chủ, chứng chỉ đến sẽ được xác thực dựa trên các chứng chỉ trong truststore của máy khách.

    Ví dụ: một ứng dụng TLS kết nối với một máy chủ TLS, 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ỉ này 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 truststore. Sau đó, khi ứng dụng cố gắng kết nối với máy chủ, ứng dụng sẽ sử dụng truststore của mình để xác thực chứng chỉ nhận được từ máy chủ.

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

Chứng chỉ có thể do một cơ quan cấp chứng chỉ (CA) phát hành hoặc có thể được khoá riêng tư mà bạn tạo tự ký. 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à phát hành chứng chỉ. Nếu không có quyền truy cập vào 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 khoá tin cậy trên Edge

Trên Edge, kho khoá chứa một hoặc nhiều 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 một tổ chức phát hành chứng chỉ (CA) ký, một chuỗi chứng chỉ trong đó chứng chỉ cuối cùng do một CA ký hoặc một chứng chỉ tự ký.
  • Khoá riêng tư dưới dạng tệp PEM. Edge hỗ trợ các kích thước khoá lên đến 2048 bit. Bạn không bắt buộc phải sử dụng cụm mật khẩu.

Truststore tương tự như keystore, ngoại trừ việc truststore chỉ chứa các chứng chỉ dưới dạng tệp PEM, nhưng không có khoá riêng tư.

Nếu chứng chỉ là một phần của chuỗi, thì kho khoá/kho tin cậy phải chứa tất cả các chứng chỉ trong chuỗi, dưới dạng các tệp PEM riêng lẻ hoặc dưới dạng một tệp duy nhất. Nếu bạn sử dụng một tệp duy nhất, thì các chứng chỉ phải theo thứ tự, trong đó chứng chỉ đầu tiên trong tệp là chứng chỉ dùng cho TLS, sau đó là chuỗi chứng chỉ theo thứ tự đế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 tin cậy. Các API thực tế đều giống nhau. Điểm khác biệt là khi tạo kho khoá, bạn sẽ truyền một tệp JAR chứa chứng chỉ và khoá riêng tư. Khi tạo một truststore, bạn chỉ cần truyền chứng chỉ dưới dạng tệp PEM.

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

Các ví dụ trong tài liệu này cho thấy chứng chỉ và khoá TLS được xác định là tệp PEM, tuân thủ đị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 khoá riêng tư đó thành tệp PEM bằng cách sử dụng các tiện ích như openssl.

Tuy nhiên, nhiều tệp .crt và tệp .key đã ở định dạng PEM. Nếu các 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 này sẽ tương thích với định dạng PEM và bạn có thể sử dụng chúng trong một kho khoá hoặc kho tin cậy mà không cần chuyển đổi thành tệp PEM.

Nếu có một chuỗi chứng chỉ và muốn sử dụng chuỗi đó trong một kho khoá hoặc kho tin cậy, thì 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 có 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 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 của bạn để tìm mọi kho khoá hiện có bằng cách sử dụng API List Keystores and Truststores (Liệt kê kho khoá và kho khoá đáng tin cậy):

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 sử dụng đám mây, một kho khoá mặc định sẽ được cung cấp cho các tổ chức dùng thử miễn phí trong cả môi trường kiểm thử và môi trường phát hành công khai. Bạn sẽ thấy kết quả sau cho lệnh gọi này đối với cả hai môi trường:

[ "freetrial" ]

Bạn có thể sử dụng kho khoá mặc định này để kiểm thử API và đẩy API vào giai đoạn phát hành chính thức, nhưng bạn thường tạo kho khoá riêng, có chứng chỉ và khoá riêng, trước khi triển khai vào giai đoạn phát hành chính thức.

Đối với khách hàng sử dụng Đám mây riêng, 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 Lấy kho khoá hoặc kho tin cậy. Đối với khách hàng trên đám mây, bạn sẽ thấy một chứng chỉ TLS duy nhất của máy chủ – chứng chỉ mặc định mà Apigee Edge cung cấp cho 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

Phản hồi sẽ có dạng 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. Đăng nhập vào giao diện người dùng quản lý Edge tại https://enterprise.apigee.com (trên đám mây) hoặc http://<ms-ip>:9000 (tại chỗ), 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.

Xem thông tin chi tiết về chứng chỉ TLS

Bạn có thể sử dụng API Lấy thông tin chi tiết về chứng chỉ từ Kho khoá hoặc Kho khoá tin cậy để xem thông tin chi tiết về chứng chỉ TLS trong kho khoá, chẳng hạn như ngày hết hạn và tổ chức 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

Phản hồi mẫu:

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

Sau đó, hãy dùng giá trị của thuộc tính certs để 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

Phản hồ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. Đăng nhập vào giao diện người dùng quản lý Edge tại https://enterprise.apigee.com (trên đám mây) hoặc http://<ms-ip>:9000 (tại chỗ), 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.

Trong giao diện người dùng Edge, bạn có thể chỉ định khoảng thời gian trước khi 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ỉ dự kiến hết hạn trong 10 ngày tới.

Tạo một kho khoá

Kho khoá dành riêng cho một môi trường trong tổ chức của bạn, ví dụ: môi trường kiểm thử hoặc môi trường sản xuấ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á đó vào môi trường thực tế, 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 một tệp JAR chứa chứng chỉ và khoá riêng tư của bạn.
  2. Tạo kho khoá và 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 có khoá riêng tư, chứng chỉ và tệp kê khai. 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ỉ của bạn, 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 descriptor.properties vào tệp JAR:

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 Tạo kho khoá hoặc kho khoá tin cậy. Tên chỉ có thể chứa các 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

Phản hồi mẫu:

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

Sau khi tạo một kho khoá có 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 chứng chỉ và khoá theo tên đại diện của chứng chỉ và khoá đó.
  • password – Mật khẩu cho khoá riêng tư. Bỏ qua tham số này nếu khoá riêng tư không có mật khẩu.

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

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

Phản hồi mẫu:

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

Tạo một truststore

Các API mà bạn dùng để tạo một truststore cũng giống như các API dùng để tạo một keystore. Điểm khác biệt duy nhất là bạn truyề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ả chứng chỉ trong chuỗi lên truststore hoặc tạo một tệp duy nhất chứa tất cả chứng chỉ, bao gồm cả dòng mới giữa mỗi chứng chỉ trong tệp. Chứng chỉ cuối cùng thường được nhà phát hành chứng chỉ ký. Ví dụ: trong truststore, bạn tải chứng chỉ ứng dụng khách client_cert_1 và chứng chỉ của nhà phát hành chứng chỉ ứng dụng khách ca_cert lên.

Trong quá trình xác thực TLS hai chiều, quá trình 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) do cùng một chứng chỉ (ca_cert) ký. Tuy nhiên, bạn không tải client_cert_2 lên truststore. Truststore vẫn chứa client_cert_1ca_cert.

Khi máy chủ truyề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 truststore nhưng được ký bởi một chứng chỉ tồn tại trong truststore. Nếu bạn xoá chứng chỉ CA, ca_cert, khỏi kho lưu trữ đáng tin cậy thì quá trình xác minh TLS sẽ không thành công.

Tạo một truststore trống trong môi trường bằng cách sử dụng Tạo một kho khoá hoặc truststore, cũng là API mà bạn dùng để tạo một 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 truststore dưới dạng tệp PEM 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 đó tuỳ 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á một kho khoá hoặc kho khoá tin cậy bằng cách sử dụng API Xoá kho khoá hoặc kho khoá tin cậy:

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

Phản hồi mẫu:

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

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