Tạo kho khoá và kho lưu trữ tin cậy bằng API quản lý Edge

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 for Cloud và Edge for Private Cloud phiên bản 4.18.01 trở lên.

Giới thiệu

Để định cấu hình chức năng dựa trên cơ sở hạ tầng khoá công khai, chẳng hạn như TLS, bạn cần tạo các khoá và khoá tin cậy cung cấp các khoá và chứng chỉ kỹ thuật số cần thiết.

Để biết thông tin giới thiệu về kho khoá, kho khoá tin cậy và bí danh, hãy xem phần Kho khoá và kho khoá tin cậy.

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.

Cách tạo kho khoá trong một môi trường:

  1. Sử dụng lệnh gọi API trong phần này để tạo kho khoá.
  2. Tạo một bí danh và tải một cặp chứng chỉ/khoá lên bí danh đó. Cách bạn tải chứng chỉ và khoá lên dựa trên định dạng của cặp chứng chỉ/khoá. Các phần sau đây mô tả cách tải từng loại cặp khoá/chứng chỉ lên:

Để tạo một kho khoá, hãy chỉ định tên kho khoá cho API Tạo kho khoá hoặc kho lưu trữ đáng tin cậy. Tên kho khoá chỉ có thể chứa các ký tự chữ-số:

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

Phản hồi mẫu:

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

Tải chứng chỉ và khoá lên dưới dạng tệp JAR

Trước tiên, bạn phải tạo một tệp JAR có khoá riêng tư, chứng chỉ và một 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

Tệp JAR kho khoá chỉ có thể chứa 3 tệp đó. Nếu bạn có một chuỗi chứng chỉ, tất cả các chứng chỉ trong chuỗi phải được thêm vào một tệp PEM duy nhất, trong đó chứng chỉ cuối cùng phải được ký bởi một CA gốc. Bạn phải thêm các chứng chỉ vào tệp PEM theo đúng thứ tự, có một dòng trống giữa mỗi chứng chỉ, tức là:

cert -> intermediate cert(1) -> intermediate cert(2) ->-> root

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

Giờ đây, 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ạo bí danh từ tệp JAR hoặc PKCS:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F file="@myKeystore.jar" -F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=keycertjar"

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:

  • alias_name – 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 bí danh của chứng chỉ và khoá đó.
  • key_pword – 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 -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Phản hồi mẫu:

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

Tải chứng chỉ và khoá lên dưới dạng tệp PEM

Tải các tệp PEM chứa chứng chỉ và khoá riêng tư lên bằng cách sử dụng API Tạo bí danh từ các tệp PEM chứng chỉ và khoá:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F keyFile="@server.key" -F certFile="@signed.crt" \
-F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=keycertfile"

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

Trong lệnh gọi này, bạn chỉ định:

  • alias_name – 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 bí danh của chứng chỉ và khoá đó.
  • key_pword – 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 -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Phản hồi mẫu:

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

Tải chứng chỉ và khoá lên dưới dạng tệp PKCS12/PFX

Tải tệp PKCS12/PFX chứa chứng chỉ và khoá riêng tư lên bằng cách sử dụng API Tạo bí danh từ tệp JAR hoặc PKCS:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" \
-F file="@myKeystore.p12" -F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=pkcs12"

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

Trong lệnh gọi này, bạn chỉ định:

  • alias_name – 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 bí danh của chứng chỉ và khoá đó.
  • key_pword – 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 -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Phản hồi mẫu:

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

Tạo và tải chứng chỉ tự ký cũng như khoá lên

Bạn có thể sử dụng API Tạo bí danh bằng cách tạo chứng chỉ tự ký để tạo chứng chỉ và khoá tự ký, rồi tải chúng lên một bí danh. Lệnh gọi sau đây chỉ định thông tin bắt buộc để tạo chứng chỉ tự ký. Bạn có thể sửa đổi lệnh gọi này để thêm thông tin bổ sung:

curl -u orgAdminEmail:password -X POST --header "Content-Type: application/json"  \
-d "{
    "alias": "selfsigned",
    "subject": {
        "commonName": "mycert"
    }
}" \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?format=selfsignedcert"

Phản hồi sẽ có dạng như sau:

{
  "alias": "selfsigned",
  "certsInfo": {
    "certInfo": [
      {
        "basicConstraints": "CA:FALSE",
        "expiryDate": 1491497204000,
        "isValid": "Yes",
        "issuer": "CN=mycert",
        "publicKey": "RSA Public Key, 2048 bits",
        "serialNumber": "00:d1:b4:78:e1",
        "sigAlgName": "SHA256withRSA",
        "subject": "CN=mycert",
        "subjectAlternativeNames": [],
        "validFrom": 1459961204000,
        "version": 3
      }
    ],
    "certName": "selfsigned-cert"
  },
  "keyName": "selfsigned"
}

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 chỉ tải một tệp chứng chỉ lên truststore dưới dạng tệp PEM.

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ỉ. Bạn phải chèn một dòng trống giữa mỗi chứng chỉ trong tệp.

Nếu bạn muốn tải nhiều chứng chỉ tự ký không thuộc một chuỗi lên, hãy sử dụng cùng một kỹ thuật: nếu có nhiều chứng chỉ mà bạn muốn tin cậy, hãy tải chúng lên trong một 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 một 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.

Hoặc bạn có chứng chỉ thứ hai, client_cert_2, được ký bằng cùng một chứng chỉ, ca_cert. Tuy nhiên, bạn không tải client_cert_2 lên truststore. Truststore vẫn chứa client_cert_1 và ca_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 truststore 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 -u orgAdminEmail:password -X POST -H "Content-Type: text/xml" \
-d '<KeyStore name="myTruststore"/>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores

Sau khi tạo truststore, hãy tải chứng chỉ lên truststore dưới dạng tệp PEM bằng cách sử dụng API Tạo bí danh từ tệp PEM chứng chỉ:

curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F certFile="@cert.pem" \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myTruststore/aliases?alias=myTruststore&format=keycertfile"

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

Xem thông tin chi tiết về một kho khoá hoặc kho tin cậy 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 -u orgAdminEmail:password -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores

Đố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 -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/freetrial

Phản hồi sẽ có dạng như sau:

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

Xem thông tin chi tiết về một email đại diện

Lấy danh sách tất cả các biệt hiệu cho một kho khoá bằng cách sử dụng API Liệt kê biệt hiệu:

curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases"

Phản hồi sẽ có dạng như sau:

[
  "alias1",
  "alias2",
  "alias3",
]

Để lấy tất cả thông tin về một bí danh, chẳng hạn như ngày hết hạn và tổ chức phát hành, hãy sử dụng API Lấy bí danh và chỉ định tên bí danh:

curl  -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}"

Phản hồi sẽ có dạng như sau:

{
  "alias": "alias1",
  "certsInfo": {
    "certInfo": [
      {
        "basicConstraints": "CA:TRUE",
        "expiryDate": 1459371335000,
        "isValid": "No",
        "issuer": "EMAILADDRESS=foo@bar.com, CN=smg, OU=doc, O=Internet Widgits Pty Ltd, L=noho, ST=Some-State, C=AU",
        "publicKey": "RSA Public Key, 1024 bits",
        "serialNumber": "00:86:a0:9b:5b:91:a9:fe:92",
        "sigAlgName": "SHA256withRSA",
        "subject": "EMAILADDRESS=foo@bar.com, CN=smg, OU=doc, O=Internet Widgits Pty Ltd, L=noho, ST=Some-State, C=AU",
        "subjectAlternativeNames": [],
        "validFrom": 1456779335000,
        "version": 3
      }
    ],
    "certName": "new\-cert"
  },
  "keyName": "newssl20"
}

Để tải chứng chỉ xuống cho một bí danh, hãy sử dụng API Xuất chứng chỉ cho một bí danh:

curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/e/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}/certificate"

Phản hồi sẽ có dạng như sau:

-----BEGIN CERTIFICATE-----
MIIDojCCAwugAwIBAgIJAIagm1uRqf6SMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD
...
RBUkaTe/570sLHY0tvkIm5tEX36ESw==
-----END CERTIFICATE-----

Nếu có một chứng chỉ đã hết hạn và muốn gia hạn, bạn có thể tải Yêu cầu ký chứng chỉ (CSR) xuống. Sau đó, bạn gửi CSR đến CA để lấy chứng chỉ mới. Để tạo CSR cho một bí danh, hãy dùng API Tạo CSR cho một bí danh:

curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}/csr"

Phản hồi sẽ có dạng như sau:

-----BEGIN CERTIFICATE REQUEST-----
MIIB1DCCAT0CAQAwgZMxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRl
...
RF5RMytbkxkvPxIE17mDKJH0d8aekv/iEOItZ+BtQg+EibMUkkjTzQ==
-----END CERTIFICATE REQUEST-----

Thêm chứng chỉ vào kho lưu trữ đáng tin cậy cho TLS hai chiều

Khi sử dụng TLS hai chiều cho các kết nối đến, tức là một yêu cầu API vào Edge, truststore sẽ chứa một chuỗi chứng chỉ hoặc CA cho mỗi ứng dụng được phép đưa ra yêu cầu đến Edge.

Khi định cấu hình truststore lần đầu, bạn có thể thêm tất cả các chứng chỉ cho những máy khách đã biết. Tuy nhiên, theo thời gian, bạn có thể muốn thêm các chứng chỉ bổ sung vào truststore khi thêm khách hàng mới.

Cách thêm chứng chỉ mới vào một kho lưu trữ đáng tin cậy dùng cho TLS hai chiều:

  1. Đảm bảo rằng bạn đang sử dụng một tham chiếu đến truststore trong máy chủ ảo.
  2. Tải một chứng chỉ mới lên truststore như mô tả ở trên trong phần Tạo truststore.
  3. Cập nhật thông tin tham chiếu truststore để đặt thành giá trị tương tự. Bản cập nhật này khiến Edge tải lại truststore và chứng chỉ mới.

    Hãy xem phần Sửa đổi một tài liệu tham khảo để biết thêm thông tin.

Xoá kho khoá/kho tin cậy hoặc bí danh

Bạn phải thận trọng khi xoá một kho khoá/kho tin cậy hoặc bí danh. Nếu bạn xoá một kho khoá, kho tin cậy hoặc bí danh đang được một máy chủ ảo, điểm cuối mục tiêu hoặc máy chủ mục tiêu 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ủ mục tiêu sẽ không thành công.

Thông thường, quy trình bạn dùng để xoá một kho khoá/kho tin cậy hoặc bí danh là:

  1. Tạo một kho khoá/kho lưu trữ đáng tin cậy hoặc bí danh mới như mô tả ở trên.
  2. Đối với các kết nối đến, tức là một yêu cầu API vào Edge, hãy cập nhật cấu hình máy chủ ảo để tham chiếu đến kho khoá và bí danh khoá mới.
  3. Đối với các kết nối đi, tức là từ Apigee đến một máy chủ phụ trợ:
    1. Cập nhật cấu hình TargetEndpoint cho mọi API proxy tham chiếu đến kho khoá và bí danh khoá cũ để tham chiếu đến kho khoá và bí danh khoá mới. Nếu TargetEndpoint của bạn tham chiếu đến TargetServer, hãy cập nhật định nghĩa TargetServer để tham chiếu đến kho khoá và bí danh khoá mới.
    2. Nếu kho khoá và kho tin cậy được tham chiếu trực tiếp từ định nghĩa TargetEndpoint, thì bạn phải triển khai lại proxy. Nếu TargetEndpoint tham chiếu một định nghĩa TargetServer và định nghĩa TargetServer tham chiếu kho khoá và kho tin cậy, thì bạn không cần triển khai lại proxy.
    3. Xác nhận rằng các proxy API của bạn đang hoạt động đúng cách.
    4. Xoá kho khoá/kho tin cậy hoặc bí danh.

Hãy xem phần Cập nhật chứng chỉ trong một biệt hiệu để biết thêm thông tin.

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 -u orgAdminEmail:password -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName

Nếu xoá và tạo lại một kho khoá hoặc kho tin cậy đang được một máy chủ ảo sử dụng, thì bạn phải triển khai lại các proxy API.

Xoá email đại diện

Bạn có thể xoá một biệt hiệu trong kho khoá hoặc kho khoá tin cậy bằng cách sử dụng API Xoá biệt hiệu:

curl -u orgAdminEmail:password -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName/aliases/{alias_name}