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.
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 khoá tin cậy cho Edge đối với Cloud và cho Edge đối với Đám mây riêng tư 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 vào cơ sở hạ tầng khoá công khai, chẳng hạn như TLS, bạn cần tạo kho khoá và kho lưu trữ tin cậy cung cấp các khoá và chứng chỉ kỹ thuật số cần thiết.

Để tìm hiểu giới thiệu về kho khoá, kho khoá tin cậy và email đại diện, hãy xem bài viết Kho khoá và Kho tin cậy.

Tạo 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 kiểm thử 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.

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 bí danh và tải 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 mô tả cách tải từng loại chứng chỉ/cặp khoá lên:

Để tạo một kho khoá, hãy chỉ định tên kho khoá là API Create a Keystore or Truststore API (Tạo kho khoá hoặc Truststore). Tên kho khoá chỉ có thể chứa 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"/>'

Câu trả lờ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 tệp JAR bằng 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

Tệp JAR kho khoá chỉ có thể chứa ba tệp đó. Nếu bạn có một chuỗi chứng chỉ, thì tất cả các chứng chỉ trong chuỗi đó phải được thêm vào một tệp PEM, trong đó chứng chỉ cuối cùng phải do một CA gốc ký. Các chứng chỉ này phải được thêm vào tệp PEM theo đúng thứ tự, với một dòng trống giữa mỗi chứng chỉ, nghĩa 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 mô-đun.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 có 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 đó tùy 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áy chủ ảo, bạn 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 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 -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Câu trả lờ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ừ chứng chỉ và tệp PEM:

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áy chủ ảo, bạn 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 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 -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

Câu trả lờ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áy chủ ảo, bạn 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 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 -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}

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

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

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

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 một chứng chỉ và khoá tự ký, sau đó tải chúng lên một bí danh. Lệnh gọi sau đây chỉ 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 để bổ sung thêm thông tin:

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ẽ xuất hiện dưới dạng:

{
  "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 kho lưu trữ uy tín

Những API mà bạn dùng để tạo kho khoá cũng giống như những API dùng để tạo kho khoá. Điểm khác biệt duy nhất là bạn chỉ tải tệp chứng chỉ (dưới dạng tệp PEM) lên kho tin cậy.

Nếu chứng chỉ này là một phần của một 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ỉ này. 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 bạn muốn tin tưởng nhiều chứng chỉ, hãy tải các chứng chỉ đó lên trong một tệp duy nhất.

Chứng chỉ cuối cùng thường do tổ chức phát hành chứng chỉ ký. Ví dụ: trong kho lưu trữ tin cậy, bạn tải chứng chỉ ứng dụng khách, chứng chỉ ứng dụng khách 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òn có chứng chỉ thứ hai, client_ ở 2, và được ký bởi cùng một chứng chỉ, ca_cert. Tuy nhiên, bạn không tải được client_certification_2 lên kho lưu trữ uy tín. Kho lưu trữ tin cậy vẫn chứa client_cert_1 và ca_cert.

Khi máy chủ vượt qua client_certification_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 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 Truststore, thì quá trình xác minh TLS sẽ không thành công.

Tạo một kho tin cậy trống trong môi trường bằng cách sử 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 dùng để tạo 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 bạn tạo kho lưu trữ tin cậy, hãy tải chứng chỉ dưới dạng tệp PEM lên kho lưu trữ tin cậy bằng cách sử dụng API Tạo bí danh từ tệp PEM cho 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 khoá tin cậy hiện có

Kiểm tra môi trường của bạn để xem có kho khoá nào hiện có hay không bằng cách sử dụng List Keystores và Truststores API:

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 dịch vụ đá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 thử nghiệm và môi trường chính thức. 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 API của mình lên phiên bản chính thức, nhưng thường thì bạn sẽ tạo kho khoá riêng bằng chứng chỉ và khoá của riêng mình trước khi triển khai phiên bản chính thức.

Đối với khách hàng sử 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 Lấy kho khoá hoặc Truststore. Đối với khách hàng sử dụng dịch vụ đá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 – 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ẽ xuất hiện dưới dạng:

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

Xem thông tin chi tiết về bí danh

Nhận danh sách tất cả các bí danh của một kho khoá bằng cách sử dụng API Danh sách bí danh:

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ẽ xuất hiện dưới dạng:

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

Để biết tất cả thông tin về bí danh, chẳng hạn như ngày hết hạn và nhà 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ẽ xuất hiện dưới dạng:

{
  "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ỉ cho một bí danh xuống, 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ẽ xuất hiện dưới dạng:

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

Nếu chứng chỉ của bạn đã hết hạn và muốn gia hạn, bạn có thể tải xuống Yêu cầu ký chứng chỉ (CSR). Sau đó, bạn gửi CSR đến CA để nhận chứng chỉ mới. Để tạo CSR cho một bí danh, hãy sử 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ẽ xuất hiện dưới dạng:

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

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

Khi sử dụng TLS hai chiều cho kết nối đến, tức là một yêu cầu API đến Edge, kho lưu trữ tin cậy sẽ chứa một chứng chỉ hoặc chuỗi CA cho mỗi ứng dụng được phép gửi yêu cầu tới Edge.

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

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

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

    Hãy xem phần Sửa đổi tệp đối chiếu để biết thêm thông tin.

Xoá kho khoá/cửa hàng tin cậy hoặc bí danh

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

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

  1. Tạo một kho khoá/kho khoá 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à 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 kho khoá và bí danh khoá mới.
  3. Đối với kết nối ra ngoài, nghĩa là từ Apigee đến máy chủ phụ trợ:
    1. Cập nhật cấu hình TargetEndpoint cho mọi proxy API 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 một 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 lưu trữ 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 đến một định nghĩa TargetServer và định nghĩa TargetServer tham chiếu đến 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 chính xác.
    4. Xoá kho khoá/kho khoá tin cậy hoặc bí danh.

Xem phần Cập nhật chứng chỉ trong bí danh để biết thêm thông tin.

Xoá kho khoá hoặc kho lưu trữ tin cậy

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

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 lưu trữ 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á bí danh

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

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