프라이빗 클라우드용 API에 대한 TLS 액세스 구성

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

Edge의 가상 호스트는 API 프록시가 노출되는 도메인과 포트를 정의하며 확장자는 앱이 API 프록시에 액세스하는 데 사용하는 URL입니다.

가상 호스트는 API 프록시가 HTTP 프로토콜을 사용하여 액세스되는지 여부도 정의합니다. TLS를 사용하는 암호화된 HTTPS 프로토콜에 의해 전송됩니다 HTTPS를 사용하도록 가상 호스트를 구성할 때 TLS를 사용하려면 Edge에 가상 호스트를 만들고 키 저장소를 사용하도록 가상 호스트를 구성합니다. 및 truststore입니다.

자세히 알아보기:

가상 호스트를 만드는 데 필요한 사항

가상 호스트를 만들기 전에 다음 정보가 있어야 합니다.

  • 가상 호스트의 공개 도메인 이름입니다. 예를 들어, 공개용 이름은 api.myCompany.com, myapi.myCompany.com 등입니다. 해당 정보 는 가상 호스트를 만들 때와 DNS 서버의 DNS 레코드를 생성할 때 가상 호스트입니다
  • 단방향 TLS의 경우 키 저장소에 다음을 포함하는 키 저장소를 생성해야 합니다. 다음과 같습니다. <ph type="x-smartling-placeholder">
      </ph>
    • TLS 인증서 - 인증 기관 (CA)이 서명한 인증서 CA가 서명한 마지막 인증서가 있는 인증서 체인입니다.
    • 비공개 키 - Edge는 최대 2,048비트의 키 크기를 지원합니다. 암호는 선택사항입니다.
  • 양방향 TLS의 경우 키 저장소가 필요하고 인증서의 CA 체인(선택사항)을 제공합니다. 다른 환경에서도 CA에서 서명한 인증서인지 확인합니다.

키 저장소 및 Truststores를 참조하세요.

TLS용 가상 호스트 구성

가상 호스트를 만들려면 가상 호스트를 정의하는 XML 객체를 만듭니다. 다음 XML 객체는 <SSLInfo> 요소를 사용하여 가상 단방향 TLS 구성을 위한 호스트:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

이 예에서 <Enabled> 요소는 true로 설정됩니다. 단방향 TLS를 사용 설정하고 <KeyStore> 및 <KeyAlias> 요소가 키 저장소를 지정합니다. TLS 연결에 사용되는 키입니다

양방향 TLS를 사용 설정하려면 <ClientAuthEnabled> 요소를 true, 트러스트 저장소 지정 <TrustStore> 사용 요소가 포함됩니다. 트러스트 저장소는 클라이언트의 인증서와 선택적으로 인증서의 CA를 보관합니다. 있습니다.

가상 호스트에서 keystore 및 truststore 이름을 지정하는 방법 결정

위의 가상 호스트 예시에서는 reference를 사용하여 키 저장소를 지정했습니다. 가 reference는 키 저장소의 이름이 포함된 변수로, 키 저장소의 이름을 지정하는 것이 아니라 키 저장소 이름을 직접 입력합니다.

참조를 사용하면 참조 값을 변경하여 가상 호스트가 사용하는 키 저장소입니다. 일반적으로 현재 키 저장소의 인증서가 만료될 예정입니다. 다시 시작할 필요 없이 참조 값을 변경할 수 있습니다. 에지 라우터를 통해 연결할 수 있습니다

또는 가상 호스트에서 리터럴 키 저장소 이름을 사용할 수 있습니다. 그러나 가상 호스트를 수정하여 키 저장소 이름을 변경하려면 Edge Router를 다시 시작해야 합니다.

키 저장소 및 truststore 참조 사용 제한사항

키 저장소 및 키 저장소에 대한 참조를 사용할 때는 다음 제한사항을 고려해야 합니다. 트러스트 저장소:

  • SNI를 지원하는 경우에만 가상 호스트에서 keystore 및 truststore 참조를 사용할 수 있습니다. Apigee Router에서 SSL을 종료하면 됩니다.
  • Apigee 라우터 앞에 부하 분산기가 있고 이 네트워크에서 TLS를 종료하는 경우에는 부하 분산기의 경우 가상 머신에서 keystore 및 truststore 참조를 사용할 수 없음 호스팅합니다

keystore 및 truststore에 대한 참조를 사용하도록 기존 가상 호스트 수정

Apigee에서는 가상 호스트에서 키 저장소 및 트러스트 저장소를 사용할 것을 적극 권장합니다. 참조를 사용하면 가상 호스트에서 사용하는 키 저장소와 트러스트 저장소를 에지 라우터를 다시 시작해야 했습니다

가상 호스트가 현재 키 저장소 이름 또는 트러스트 저장소가 없으면 참조를 사용하도록 변환할 수 있습니다. 이렇게 하려면 다음을 사용하도록 가상 호스트를 업데이트하세요. 에지 라우터를 다시 시작합니다.

Edge 4.15.07 이하의 TLS 암호화 및 프로토콜 설정

Edge 버전 4.15.07 이하를 사용하는 경우 TLS 프로토콜 및 암호화를 설정합니다. <Ciphers><Protocols> 하위 태그를 사용하여 가상 호스트에서 <SSLInfo> 태그 이러한 태그는 아래 표에 설명되어 있습니다.

예를 들면 다음과 같습니다.

    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>myTestKeystore</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>false</ClientAuthEnabled>
            <KeyStore>myTestKeystore</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <Ciphers>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
            </Ciphers>
            <Protocols>
                <Protocol>TLSv1.2</Protocol>
            </Protocols>
        </SSLInfo>
   </SSLInfo>

<Cipher> 태그는 암호화의 Java 및 JSSE 이름입니다. 예를 들어 Java 8의 경우 다음을 참조하세요. http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Edge 4.16.01에서 4.16.09로의 TLS 암호화 및 프로토콜 지정

Edge 4.16.01~4.16.09에서는 가상 호스트에 대한 기본 암호화 및 프로토콜을 설정함 라우터에 전역으로 전송됩니다. 그러면 이 기본값이 모든 가상 호스트에 적용됩니다.

토큰을 사용하여 기본 프로토콜 및 암호화를 지정합니다.

  • 기본 프로토콜을 지정하려면 conf_load_balancing_load.balancing.driver.server.ssl.protocols 토큰을 사용하세요.
  • 라우터의 기본 암호화를 지정하려면 conf_load_balancing_load.balancing.driver.server.ssl.ciphers 토큰을 사용하세요.

conf_load_balancing_load.balancing.driver.server.ssl.protocols 토큰의 기본값 다음과 같습니다.

conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2

이 설정은 라우터가 TLS 버전 1.0, 1.1, 1.2를 지원하도록 지정합니다. 쉼표로 구분된 값 목록을 토큰에 추가합니다.

conf_load_balancing_load.balancing.driver.server.ssl.ciphers 토큰의 기본값 다음과 같습니다.

conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES

이 설정은 다음을 지정합니다.

  • 키 길이가 128비트 이상 (HIGH)이어야 합니다.
  • 인증이 없는 암호화 제외 (!aNULL)
  • MD5를 사용하여 암호화 스위트 제외 (!MD5)
  • DH를 사용하는 암호화 스위트 제외 (익명 DH, 임시 DH, 고정 DH 포함) 트리플 DES (!DH+3DES)
  • RSA 키 교환 및 삼중 DES를 사용하는 암호화 스위트 제외 (!RSA+3DES)

이 토큰에서 허용하는 구문 및 값에 대한 자세한 내용은 OpenSSL 암호화를 참조하세요. 이 토큰은 AES128-SHA256과 같은 OpenSSL 암호화 이름을 사용하며 Java/JSSE 암호화 이름(예: TLS_RSA_WITH_AES_128_CBC_SHA256)

라우터 토큰을 설정하려면 다음 단계를 따르세요.

  1. /opt/apigee/customer/application/router.properties 수정 파일에서 참조됩니다. 해당 파일이 없으면 새로 만듭니다.
  2. conf_load_balancing_load.balancing.driver.server.ssl.ciphers 설정 토큰입니다. 예를 들어 사전 공유 키를 사용하여 TLSv1.2만 지정하고 암호화 스위트를 제외하려면 추가!PSK:
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
    conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
  3. router.properties 파일이 다음을 소유하는지 확인합니다. Apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Edge Router를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. 토큰의 값을 확인합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

설정 Edge 버전 4.17.01 이상의 TLS 가상 호스트 매개변수

Edge 버전 4.17.01 이상을 사용하는 경우 TLS 프로토콜 및 암호화와 같은 개별 가상 호스트의 <Properties> 하위 태그를 사용하여 <VirtualHost> 태그 사이에 있어야 합니다. 이러한 태그는 가상 호스트 속성 참조에 설명되어 있습니다.

예를 들면 다음과 같습니다.

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
    <Properties>
        <Property name="proxy_read_timeout">50</Property>
        <Property name="keepalive_timeout">300</Property>
        <Property name="proxy_request_buffering">off</Property>
        <Property name="proxy_buffering">off</Property>
        <Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
        <Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
    </Properties>
</VirtualHost>

ssl_ciphers 토큰에서 허용하는 구문 및 값에 대한 자세한 내용은 OpenSSL 암호화를 참고하세요. 이 토큰은 AES128-SHA256과 같은 OpenSSL 암호화 이름을 사용하며 Java/JSSE 암호화 이름(예: TLS_RSA_WITH_AES_128_CBC_SHA256)

HTTPS를 사용하는 가상 호스트 만들기

이 예시에서는 참조를 사용하여 가상 호스트에 키 저장소를 지정합니다. 참조를 사용하면 라우터를 다시 시작하지 않고도 키 저장소를 변경할 수 있습니다.

가상 호스트를 만들려면 다음 절차를 따르세요.

  1. 다음을 사용하여 myTestKeystore라는 키 저장소 생성 및 구성 여기에 설명된 절차: 키 저장소 및 트러스트 저장소. 키 저장소가 별칭 이름을 사용하는지 확인하세요. 인증서와 비공개 키에 대한 myKeyAlias입니다.
  2. 다음 POST API 호출을 사용하여 참조 만들기 위에서 생성한 키 저장소에 대한 결과를 keystoreref로 지정합니다.

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="keystoreref">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>'
      -u email:password
    

    참조는 키 저장소의 이름과 참조 유형을 KeyStore로 지정합니다.

    참조를 보려면 다음 GET API 호출을 사용하세요.

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Create a Virtual Host API - 여기서 <ms-IP>는 IP 주소입니다. 또는 도메인 이름을 선택합니다.

    올바른 키 저장소 참조와 키 별칭을 지정해야 합니다.

    curl -X POST -H "Content-Type:application/xml" \
      http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \
      -d '<VirtualHost  name="newTLSTrustStore2">
        <HostAliases>
          <HostAlias>apiTLS.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9005</Port>
        <OCSPStapling>off</OCSPStapling>
        <SSLInfo>
          <Enabled>true</Enabled>
          <ClientAuthEnabled>false</ClientAuthEnabled>
          <KeyStore>ref://keystoreref</KeyStore>
          <KeyAlias>myKeyAlias</KeyAlias>
        </SSLInfo>
      </VirtualHost>' \
      -u email:password
  4. 호스트 별칭과 일치하는 가상 호스트의 DNS 레코드를 만듭니다.
  5. 기존 API 프록시가 있는 경우 다음 인스턴스의 <HTTPConnection> 요소에 가상 호스트를 추가합니다. ProxyEndpoint를 선택합니다. 가상 호스트가 모든 새 API 프록시에 자동으로 추가됩니다.

    가상 호스트를 만든 후 API 프록시 업데이트를 참조하세요. 가상 호스트에 대한 정보

가상 호스트를 사용하도록 API 프록시를 업데이트하고 호스트에 DNS 레코드를 만든 후 아래와 같이 API 프록시에 액세스할 수 있습니다.

https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}

예를 들면 다음과 같습니다.

https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282

참조 만들기 및 수정 keystore 또는 truststore에

키 저장소 참조를 사용하도록 가상 호스트를 구성할 수도 있습니다(선택사항). truststore를 대신 사용하세요. 참조 사용의 장점은 다른 keystore 또는 truststore를 가리켜 라우터.

예를 들어 다음은 키 저장소에 대한 참조를 사용하는 가상 호스트입니다.

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://keystoreref</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

다음 POST API 호출을 사용하여 keystoreref라는 참조를 만듭니다.

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password

참조는 키 저장소의 이름과 유형을 지정합니다.

참조를 보려면 다음 GET API 호출을 사용하세요.

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

다른 키 저장소를 가리키도록 나중에 참조를 변경하여 별칭의 이름을 동일하게 하려면 다음 PUT 호출을 사용합니다.

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password