Edge 관리 API를 사용하여 키 저장소 및 트러스트 저장소 만들기

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

이 문서에서는 클라우드용 Edge 및 프라이빗 클라우드용 Edge 버전 4.18.01 이상에 대해 키 저장소와 트러스트 저장소를 생성, 수정, 삭제하는 방법을 설명합니다.

소개

TLS와 같은 공개 키 인프라를 사용하는 기능을 구성하려면 필요한 키와 디지털 인증서를 제공하는 키 저장소와 트러스트 저장소를 만들어야 합니다.

키 저장소, 트러스트 저장소, 별칭에 관한 소개는 키 저장소 및 트러스트 저장소를 참조하세요.

키 저장소 만들기

키 저장소는 조직의 환경에 따라 다릅니다(예: 테스트 또는 프로덕션 환경). 따라서 프로덕션 환경에 배포하기 전에 테스트 환경에서 키 저장소를 테스트하려면 두 환경 모두에서 키 저장소를 만들어야 합니다.

환경에서 키 저장소를 생성하려면 다음 단계를 따르세요.

  1. 이 섹션의 API 호출을 사용하여 키 저장소를 생성합니다.
  2. 별칭을 만들고 인증서/키 쌍을 별칭에 업로드합니다. 인증서와 키를 업로드하는 방법은 인증서/키 쌍의 형식에 따라 다릅니다. 다음 섹션에서는 각 유형의 인증서/키 쌍 업로드 방법을 설명합니다.

키 저장소를 만들려면 Create a Keystore or Truststore API에 키 저장소 이름을 지정합니다. 키 저장소 이름에는 영숫자 문자만 포함할 수 있습니다.

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"/>'

샘플 응답:

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

인증서 및 키를 JAR 파일로 업로드

먼저 비공개 키, 인증서, 매니페스트로 JAR 파일을 만들어야 합니다. JAR 파일에는 다음 파일과 디렉터리가 포함되어야 합니다.

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

키 저장소 JAR에는 이 세 개의 파일만 포함될 수 있습니다. 인증서 체인이 있는 경우 체인의 모든 인증서를 단일 PEM 파일에 추가해야 합니다. 여기서 마지막 인증서는 루트 CA에서 서명해야 합니다. 인증서는 각 인증서 사이에 빈 줄을 추가하여 PEM 파일에 올바른 순서로 추가해야 합니다. 즉,

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

키 쌍과 인증서가 포함된 디렉터리에 /META-INF라는 디렉터리를 만듭니다. 그런 다음 다음 내용으로 /META-INF에 descriptor.properties라는 파일을 만듭니다.

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

키 쌍과 인증서가 포함된 JAR 파일을 생성합니다.

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

JAR 파일에 descriptor.properties를 추가합니다.

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

이제 Create an alias from a JAR or PKCS file API를 사용하여 인증서 및 비공개 키가 포함된 JAR 파일을 업로드할 수 있습니다.

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"

여기서 -F 옵션은 JAR 파일의 경로를 지정합니다.

이 호출에서 다음을 지정합니다.

  • alias_name - 키 저장소의 인증서와 키를 식별합니다. 가상 호스트를 만들 때 별칭 이름으로 인증서와 키를 참조합니다.
  • key_pword - 비공개 키의 비밀번호입니다. 비공개 키에 비밀번호가 없는 경우 이 매개변수를 생략합니다.

키 저장소가 올바르게 업로드되었는지 확인합니다.

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

샘플 응답:

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

인증서 및 키를 PEM 파일로 업로드

Create an alias from certificate and key PEM files(인증서 및 키 PEM 파일에서 별칭 만들기) API를 사용하여 인증서와 비공개 키가 포함된 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"

여기서 -F 옵션은 PEM 파일의 경로를 지정합니다.

이 호출에서 다음을 지정합니다.

  • alias_name - 키 저장소의 인증서와 키를 식별합니다. 가상 호스트를 만들 때 별칭 이름으로 인증서와 키를 참조합니다.
  • key_pword - 비공개 키의 비밀번호입니다. 비공개 키에 비밀번호가 없는 경우 이 매개변수를 생략합니다.

키 저장소가 올바르게 업로드되었는지 확인합니다.

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

샘플 응답:

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

인증서 및 키를 PKCS12/PFX 파일로 업로드

Create an alias from a JAR or PKCS file(JAR 또는 PKCS 파일에서 별칭 만들기) API를 사용하여 인증서와 비공개 키가 포함된 PKCS12/PFX 파일을 업로드합니다.

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"

여기서 -F 옵션은 P12 파일의 경로를 지정합니다.

이 호출에서 다음을 지정합니다.

  • alias_name - 키 저장소의 인증서와 키를 식별합니다. 가상 호스트를 만들 때 별칭 이름으로 인증서와 키를 참조합니다.
  • key_pword - 비공개 키의 비밀번호입니다. 비공개 키에 비밀번호가 없는 경우 이 매개변수를 생략합니다.

키 저장소가 올바르게 업로드되었는지 확인합니다.

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

샘플 응답:

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

자체 서명 인증서와 키 생성 및 업로드

자체 서명된 인증서를 생성하여 별칭 만들기 API를 사용하여 자체 서명된 인증서와 키를 만들고 별칭에 업로드할 수 있습니다. 다음 호출은 자체 서명 인증서를 만드는 데 필요한 정보만 지정합니다. 이 호출을 수정하여 정보를 추가할 수 있습니다.

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"

응답은 다음과 같이 표시됩니다.

{
  "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"
}

트러스트 저장소 만들기

트러스트 저장소를 만드는 데 사용하는 API는 키 저장소를 만드는 데 사용하는 API와 동일합니다. 유일한 차이점은 인증서 파일을 PEM 파일로 truststore에 업로드한다는 것입니다.

인증서가 체인의 일부인 경우 체인의 모든 인증서를 트러스트 저장소에 개별적으로 업로드하거나 모든 인증서가 포함된 단일 파일을 만들어야 합니다. 파일의 각 인증서 사이에 빈 줄을 삽입해야 합니다.

체인에 속하지 않는 여러 자체 서명 인증서를 업로드하려면 동일한 기법을 사용합니다. 즉, 신뢰하려는 인증서가 여러 개 있는 경우 단일 파일로 업로드합니다.

최종 인증서는 일반적으로 인증서 발급기관에서 서명합니다. 예를 들어 트러스트 저장소에서 클라이언트 인증서 client_cert_1과 클라이언트 인증서 발급기관의 인증서 ca_cert를 업로드합니다.

양방향 TLS 인증 중에 서버가 TLS 핸드셰이크 프로세스의 일부로 client_cert_1을 클라이언트에 전송하면 클라이언트 인증이 성공합니다.

또는 동일한 인증서 ca_cert로 서명된 두 번째 인증서 client_cert_2가 있습니다. 그러나 client_cert_2는 트러스트 저장소에 업로드하지 않습니다. 트러스트 저장소에는 여전히 client_cert_1 및 ca_cert가 포함됩니다.

서버가 TLS 핸드셰이크의 일부로 client_cert_2를 전달하면 요청이 성공합니다. 이는 client_cert_2가 트러스트 저장소에 존재하지 않지만 트러스트 저장소에 있는 인증서로 서명된 경우 Edge에서 TLS 확인을 성공하도록 허용하기 때문입니다. 트러스트 저장소에서 CA 인증서 ca_cert를 삭제하면 TLS 인증에 실패합니다.

키 저장소를 만드는 데 사용하는 것과 동일한 API인 키 저장소 또는 Truststore 만들기를 사용하여 환경에 빈 truststore를 만듭니다.

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

트러스트 저장소를 만든 후 Create an alias from a certificate PEM file(인증서 PEM 파일에서 별칭 만들기) API를 사용하여 인증서를 PEM 파일로 트러스트 저장소에 업로드합니다.

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"

여기서 -F 옵션은 PEM 파일의 경로를 지정합니다.

기존 키 저장소 또는 트러스트 저장소 세부정보 가져오기

List Keystores and Truststores API를 사용하여 기존 키 저장소의 환경을 확인합니다.

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

클라우드 고객의 경우 테스트 환경과 프로덕션 환경 모두에서 무료 체험판 조직에 기본 키 저장소가 제공됩니다. 두 환경 모두 이 호출에 대해 다음과 같은 결과가 표시됩니다.

[ "freetrial" ]

이 기본 키 저장소를 사용하여 API를 테스트하고 API를 프로덕션으로 푸시할 수 있지만 일반적으로 프로덕션에 배포하기 전에 자체 인증서와 키를 사용하여 자체 키 저장소를 만듭니다.

Private Cloud 고객의 경우 첫 번째 키 저장소를 만들 때까지 반환된 배열은 비어 있습니다.

Get a Keystore or Truststore API를 사용하여 키 저장소의 콘텐츠를 확인합니다. 클라우드 고객의 경우 Apigee Edge가 무료 체험판 계정에 제공하는 기본 인증서인 단일 서버 TLS 인증서가 표시됩니다.

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

응답은 다음과 같이 표시됩니다.

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

별칭 세부정보 보기

List alias API를 사용하여 키 저장소의 모든 별칭 목록을 가져옵니다.

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

응답은 다음과 같이 표시됩니다.

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

만료일 및 발급기관과 같은 별칭에 관한 모든 정보를 가져오려면 Get alias API를 사용하고 별칭 이름을 지정합니다.

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

응답은 다음과 같이 표시됩니다.

{
  "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"
}

별칭에 대한 인증서를 다운로드하려면 별칭의 인증서 내보내기 API를 사용합니다.

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"

응답은 다음과 같이 표시됩니다.

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

만료된 인증서가 있고 이를 갱신하려면 인증서 서명 요청 (CSR)을 다운로드하면 됩니다. 그런 다음 CSR을 CA로 보내 새 인증서를 가져옵니다. 별칭의 CSR을 생성하려면 Generate a CSR for an alias API를 사용합니다.

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"

응답은 다음과 같이 표시됩니다.

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

양방향 TLS를 위해 트러스트 저장소에 인증서 추가

인바운드 연결에 양방향 TLS를 사용하는 경우(Edge에 대한 API 요청) 트러스트 저장소에는 Edge에 요청할 수 있는 각 클라이언트에 대한 인증서 또는 CA 체인이 포함됩니다.

트러스트 저장소를 처음 구성할 때 알려진 클라이언트의 모든 인증서를 추가할 수 있습니다. 하지만 시간이 지남에 따라 새 클라이언트를 추가할 때 트러스트 저장소에 인증서를 추가해야 할 수도 있습니다.

양방향 TLS에 사용되는 트러스트 저장소에 새 인증서를 추가하려면 다음 안내를 따르세요.

  1. 가상 호스트의 트러스트 저장소에 대한 참조를 사용하고 있는지 확인합니다.
  2. 위의 트러스트 저장소 만들기에 설명된 대로 트러스트 저장소에 새 인증서를 업로드합니다.
  3. truststore 참조를 업데이트하여 동일한 값으로 설정합니다. 이 업데이트를 통해 Edge는 트러스트 저장소와 새 인증서를 새로고침합니다.

    자세한 내용은 참조 수정을 참고하세요.

키 저장소/truststore 또는 별칭 삭제

키 저장소/truststore 또는 별칭을 삭제할 때는 주의해야 합니다. 가상 호스트, 대상 엔드포인트 또는 대상 서버에서 사용 중인 키 저장소, 트러스트 저장소 또는 별칭을 삭제하면 가상 호스트 또는 대상 엔드포인트/대상 서버를 통한 모든 API 호출이 실패합니다.

일반적으로 키 저장소/truststore 또는 별칭을 삭제하는 데 사용하는 프로세스는 다음과 같습니다.

  1. 위에서 설명한 대로 새 키 저장소/truststore 또는 별칭을 만듭니다.
  2. 인바운드 연결(Edge에 대한 API 요청)의 경우 새 키 저장소 및 키 별칭을 참조하도록 가상 호스트 구성을 업데이트합니다.
  3. 아웃바운드 연결의 경우(Apigee에서 백엔드 서버로의 경우):
    1. 이전 키 저장소 및 키 별칭을 참조한 모든 API 프록시의 TargetEndpoint 구성을 업데이트하여 새 키 저장소 및 키 별칭을 참조하도록 합니다. TargetEndpoint가 TargetServer를 참조하는 경우 새 키 저장소와 키 별칭을 참조하도록 TargetServer 정의를 업데이트합니다.
    2. 키 저장소와 트러스트 저장소가 TargetEndpoint 정의에서 직접 참조되는 경우 프록시를 다시 배포해야 합니다. TargetEndpoint가 TargetServer 정의를 참조하고 TargetServer 정의가 키 저장소와 truststore를 참조하는 경우 프록시 재배포가 필요하지 않습니다.
    3. API 프록시가 올바르게 작동하는지 확인합니다.
    4. 키 저장소/truststore 또는 별칭을 삭제합니다.

자세한 내용은 별칭에서 인증서 업데이트를 참고하세요.

키 저장소 또는 트러스트 저장소 삭제

Delete a Keystore or Truststore API를 사용하여 키 저장소 또는 트러스트 저장소를 삭제할 수 있습니다.

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

가상 호스트에서 사용 중인 키 저장소 또는 트러스트 저장소를 삭제하고 다시 만드는 경우 API 프록시를 다시 배포해야 합니다.

별칭 삭제

다음과 같이 Delete alias API를 사용하여 키 저장소 또는 트러스트 저장소에서 별칭을 삭제할 수 있습니다.

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