

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 서버 인증서
<a name="configuring-https.certificate"></a>

이 주제에서는 HTTPS를 구성하는 데 사용할 수 있는 다양한 유형의 인증서와 각 인증서를 적용할 시기에 대해 설명합니다. 이 섹션의 하위 주제는 자체 인증서를 생성하는 지침과 업로드 방법을 제공합니다.

**AWS Certificate Manager (ACM)**  
ACM은 서버 인증서를 프로비저닝, 관리 및 배포하기 위한 기본 도구입니다. 프로그래밍 방식으로 또는를 사용하여이 작업을 수행할 수 있습니다 AWS CLI. ACM을 사용하면 도메인 이름에 대한 보안 인증서를 무료로 생성할 수 있습니다.

 ACM 인증서는 AWS 로드 밸런서 및 Amazon CloudFront 배포에서만 사용할 수 있으며 ACM은 특정 AWS 리전에서만 사용할 수 있습니다. Elastic Beanstalk에서 ACM 인증서를 사용하려면 [로드 밸런서에서 HTTPS 종료 구성](configuring-https-elb.md) 단원을 참조하십시오. ACM에 대한 자세한 내용은 [https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)를 참조하세요.

**참고**  
 ACM을 사용할 수 있는 리전 목록은 *Amazon Web Services 일반 참조*의 [ 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/acm.html)을 참조하세요.

 AWS 리전에서 ACM을 사용할 수 없는 경우 타사 또는 자체 서명된 인증서와 프라이빗 키를 AWS Identity and Access Management (IAM)에 업로드할 수 있습니다. 를 사용하여 인증서를 업로드 AWS CLI 할 수 있습니다. IAM에 저장된 인증서는 로드 밸런서와 CloudFront 배포를 통해 사용할 수 있습니다. 자세한 내용은 [IAM에 인증서 업로드](configuring-https-ssl-upload.md) 단원을 참조하십시오.

**타사 인증서**  
리전에서 ACM을 사용할 수 없는 경우, 타사의 보안 인증서를 구매할 수 있습니다. 타사 인증서를 사용하여 로드 밸런서, 백엔드 인스턴스 또는 두 개 모두에서 HTTPS 트래픽의 암호를 해독할 수 있습니다.

**자체 서명된 인증서**  
오픈 소스 도구를 사용하여 개발 및 테스트 용도로 [인증서를 만들어 서명](configuring-https-ssl.md)할 수 있습니다. 자체 서명된 인증서는 무료이며 만들기 쉬우나, 퍼블릭 사이트에서 프런트 엔드 해독에는 사용할 수 없습니다. 클라이언트와 HTTPS 간의 연결에 자체 서명된 인증서를 사용하려는 경우, 사용자의 브라우저에 웹 사이트가 안전하지 않다는 오류 메시지가 표시됩니다. 그러나 자체 서명된 인증서를 사용하여 문제 없이 백엔드 연결을 보호할 수 있습니다.

# X509 인증서 생성 및 서명
<a name="configuring-https-ssl"></a>

`OpenSSL`을 사용하여 애플리케이션의 X509 인증서를 생성할 수 있습니다. OpenSSL은 x509 인증서의 생성 및 서명을 비롯한 다양한 암호화 기능을 지원하는 표준 오픈 소스 라이브러리입니다. OpenSSL에 대한 자세한 내용은 [www.openssl.org](https://www.openssl.org/)를 참조하십시오.

**참고**  
[단일 인스턴스 환경에서 HTTPS를 사용](https-singleinstance.md)하거나 자체 서명된 인증서로 [백엔드에서 다시 암호화](configuring-https-endtoend.md)하려는 경우 인증서를 로컬에서 생성하면 됩니다. 도메인 이름을 소유한 경우에서 인증서를 생성하고 AWS Certificate Manager (ACM)을 사용하여 로드 밸런싱된 환경에서 무료로 AWS 사용할 수 있습니다. 자세한 내용은 *AWS Certificate Manager 사용 설명서*의 [인증서 요청](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)을 참조하세요.

OpenSSL이 이미 설치되어 있는지 확인하려면 명령줄에서 `openssl version`을 실행합니다. 설치되어 있지 않은 경우 [퍼블릭 GitHub 리포지토리](https://github.com/openssl/openssl)의 지침을 참조하여 소스 코드를 빌드하고 설치하거나, 선호하는 패키지 관리자를 사용할 수 있습니다. OpenSSL은 Elastic Beanstalk의 Linux 이미지에도 설치되어 있으므로 빠른 대안은 [EB CLI](eb-cli3.md)의 **eb ssh** 명령을 사용하여 실행 중인 환경의 EC2 인스턴스에 연결하는 것입니다.

```
~/eb$ eb ssh
[ec2-user@ip-255-55-55-255 ~]$ openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015
```

인증서 서명 요청(CSR)을 생성하려면 RSA 프라이빗 키를 생성해야 합니다. 프라이빗 키를 생성하려면 **openssl genrsa** 명령을 사용합니다.

```
[ec2-user@ip-255-55-55-255 ~]$ openssl genrsa 2048 > privatekey.pem
Generating RSA private key, 2048 bit long modulus
.................................................................................................................................+++
...............+++
e is 65537 (0x10001)
```

*privatekey.pem*  
프라이빗 키를 저장할 파일의 이름입니다. 일반적으로 **openssl genrsa** 명령은 프라이빗 키 내용을 화면에 인쇄하지만, 이 명령은 출력을 파일로 파이프합니다. 파일 이름을 선택한 후, 나중에 검색할 수 있도록 안전한 곳에 파일을 저장합니다. 프라이빗 키를 잃어버리면 인증서를 사용할 수 없습니다.

CSR은 디지털 서버 인증서를 신청하기 위해 인증 기관(CA)에 보내는 파일입니다. CSR을 생성하려면 **openssl req** 명령을 사용합니다.

```
$ openssl req -new -key privatekey.pem -out csr.pem
You are about to be asked to enter information that will be incorporated 
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
```

요청된 정보를 입력하고 **Enter(입력)**를 누릅니다. 다음 표에 각 필드에 대한 설명과 예가 나와 있습니다.


****  

| 이름 | 설명 | 예제 | 
| --- | --- | --- | 
| 국가 이름 | 해당 국가의 두 자리 ISO 약자. | US = 미국 | 
| 주 또는 지방 | 해당 조직이 위치한 주 또는 지방의 이름. 이 이름은 약어로 지정할 수 없습니다. | 워싱턴 | 
| 시 이름 | 해당 조직이 위치한 주 또는 시의 이름. | 시애틀 | 
| 조직 이름 | 해당 조직의 정식 이름. 조직 이름의 약칭을 사용하지 마세요. | Example Corporation | 
| 조직 단위 | 조직에 대한 추가 정보(선택 사항). | 마케팅 | 
| 일반 이름 | 웹 사이트의 정규화된 도메인 이름입니다. 이는 사용자가 사이트를 방문할 때 보는 도메인 이름과 일치해야 합니다. 그렇지 않으면 인증서 오류가 표시됩니다. | www.example.com | 
| 이메일 주소 | 사이트 관리자의 이메일 주소입니다. | someone@example.com | 

서명을 위해 서명 요청을 제3자에게 제출하거나, 개발 및 테스트를 위해 자체 서명할 수 있습니다. 자체 서명된 인증서는 로드 밸런서와 EC2 인스턴스 간의 백엔드 HTTPS에도 사용할 수 있습니다.

인증서에 서명하려면 **openssl x509** 명령을 사용합니다. 다음 예에서는 이전 단계의 프라이빗 키(*privatekey.pem*)와 서명 요청(*csr.pem*)을 사용하여 *365*일 동안 유효한 *public.crt*라는 퍼블릭 인증서를 생성합니다.

```
$ openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out public.crt
Signature ok
subject=/C=us/ST=washington/L=seattle/O=example corporation/OU=marketing/CN=www.example.com/emailAddress=someone@example.com
Getting Private key
```

나중에 사용할 수 있도록 프라이빗 키와 퍼블릭 인증서를 보관하십시오. 서명 요청을 무시할 수 있습니다. 항상 [안전한 위치에 프라이빗 키를 저장](https-storingprivatekeys.md)하고 소스 코드에 이를 추가하지 마십시오.

Windows Server 플랫폼에서 인증서를 사용하려면 이를 PFX 형식으로 변환해야 합니다. 다음 명령을 사용하여 프라이빗 키와 퍼블릭 인증서 파일에서 PFX 인증서를 생성합니다.

```
$ openssl pkcs12 -export -out example.com.pfx -inkey privatekey.pem -in public.crt
Enter Export Password: password
Verifying - Enter Export Password: password
```

이제 인증서가 있으므로 로드 밸런서에서 사용할 수 있도록 [이를 IAM에 업로드](configuring-https-ssl-upload.md)하거나, [HTTPS를 종료하도록 환경의 인스턴스를 구성](https-singleinstance.md)할 수 있습니다.

# IAM에 인증서 업로드
<a name="configuring-https-ssl-upload"></a>

인증서를 Elastic Beanstalk 환경의 로드 밸런서와 함께 사용하려면 인증서와 프라이빗 키를 AWS Identity and Access Management (IAM)에 업로드합니다. Elastic Load Balancing 로드 밸런서 및 Amazon CloudFront 배포에서 IAM에 저장된 인증서를 사용할 수 있습니다.

**참고**  
AWS Certificate Manager (ACM)은 서버 인증서를 프로비저닝, 관리 및 배포하는 데 선호되는 도구입니다. ACM 인증서 요청에 대한 자세한 내용은 *AWS Certificate Manager 사용 설명서*의 [인증서 요청](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)을 참조하세요. 서드 파티 인증서를 ACM으로 가져오는 방법에 대한 자세한 내용은 *AWS Certificate Manager 사용 설명서*의 [인증서 가져오기](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)를 참조하세요. [AWS 리전에서 ACM을 사용할 수 없는 경우에만 IAM을 사용하여 인증서를 업로드합니다](https://docs.aws.amazon.com/general/latest/gr/acm.html).

 AWS Command Line Interface (AWS CLI)를 사용하여 인증서를 업로드할 수 있습니다. 다음 명령은 *private-key.pem*이라는 프라이빗 키가 있는 *https-cert.crt*라는 자체 서명된 인증서를 업로드합니다.

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-body file://https-cert.crt --private-key file://private-key.pem
{
    "ServerCertificateMetadata": {
        "ServerCertificateId": "AS5YBEIONO2Q7CAIHKNGC",
        "ServerCertificateName": "elastic-beanstalk-x509",
        "Expiration": "2017-01-31T23:06:22Z",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:server-certificate/elastic-beanstalk-x509",
        "UploadDate": "2016-02-01T23:10:34.167Z"
    }
}
```

`file://` 접두사는에 현재 디렉터리에 있는 파일의 콘텐츠를 로드 AWS CLI 하도록 지시합니다. *elastic-beanstalk-x509*는 IAM에서 인증서를 호출할 이름을 지정합니다.

인증 기관에서 인증서를 구매했으며 인증서 체인 파일을 받은 경우, `--certificate-chain` 옵션을 포함시켜 인증서 체인 파일도 업로드합니다.

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-chain file://certificate-chain.pem --certificate-body file://https-cert.crt --private-key file://private-key.pem
```

인증서의 Amazon 리소스 이름(ARN)을 적어 둡니다. HTTPS를 사용하도록 로드 밸런서 구성 설정을 업데이트할 때 이를 사용합니다.

**참고**  
IAM에 업로드된 인증서는 환경의 로드 밸런서에서 더 이상 사용되지 않는 경우에도 저장 상태를 유지합니다. 여기에는 기밀 데이터가 들어 있습니다. 환경에 더 이상 인증서가 필요하지 않은 경우 인증서를 삭제하십시오. IAM에서 인증서를 삭제하는 방법에 대한 자세한 내용은 [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate) 단원을 참조하십시오.

IAM의 서버 인증서에 대한 자세한 내용은 *IAM 사용 설명서*의 [서버 인증서 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html)을 참조하세요.

# 프라이빗 키를 Amazon S3에 안전하게 저장
<a name="https-storingprivatekeys"></a>

퍼블릭 인증서에 서명할 때 사용하는 프라이빗 키는 개인 소유로, 소스 코드에 커밋하면 안 됩니다. 프라이빗 키를 Amazon S3에 업로드한 후 애플리케이션 배포 중에 Amazon S3에서 이 파일을 다운로드하도록 Elastic Beanstalk를 구성하면 프라이빗 키를 구성 파일에 저장하지 않을 수 있습니다.

다음 예제에서는 [구성 파일](ebextensions.md)의 [리소스](environment-resources.md) 및 [파일](customize-containers-ec2.md#linux-files) 섹션이 Amazon S3 버킷에서 프라이빗 키 파일을 다운로드하는 것을 보여 줍니다.

**Example .ebextensions/privatekey.config**  

```
Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  "/etc/pki/tls/certs/server.key":
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://elasticbeanstalk-us-west-2-123456789012.s3.us-west-2.amazonaws.com/server.key
```

예제의 버킷 이름과 URL을 본인의 것으로 바꿉니다. 이 파일의 첫 번째 항목에서는 환경의 Auto Scaling 그룹의 메타데이터에 `S3Auth`라는 인증 방법을 추가합니다. 환경에 대해 사용자 지정 [인스턴스 프로파일](concepts-roles-instance.md)을 구성한 경우 이것이 사용되며, 그렇지 않은 경우 기본값인 `aws-elasticbeanstalk-ec2-role`이 적용됩니다. 기본 인스턴스 프로파일에는 Elastic Beanstalk 스토리지 버킷에서 읽을 권한이 있습니다. 다른 버킷을 사용하는 경우 [인스턴스 프로파일에 권한을 추가](iam-instanceprofile.md#iam-instanceprofile-addperms)합니다.

두 번째 항목에서는 `S3Auth` 인증 방법을 사용하여 지정된 URL에서 프라이빗 키를 다운로드하고 이를 `/etc/pki/tls/certs/server.key`에 저장합니다. 그러면 프록시 서버가 이 위치에서 프라이빗 키를 읽어 [인스턴스에서 HTTPS 연결을 종료](https-singleinstance.md)할 수 있습니다.

환경의 EC2 인스턴스에 할당된 인스턴스 프로파일에는 지정된 버킷에서 키 객체를 읽을 권한이 있어야 합니다. IAM의 객체를 읽을 권한이 [인스턴스 프로파일에 있는지](iam-instanceprofile.md#iam-instanceprofile-verify), 버킷 및 객체에 대한 권한이 인스턴스 프로파일을 금지하지 않는지 확인합니다.

**버킷의 권한을 보려면**

1. [Amazon S3 관리 콘솔](https://console.aws.amazon.com/s3/home)을 엽니다.

1. 버킷을 선택합니다.

1. **Properties(속성)**를 선택한 후 **권한**을 선택합니다.

1. 계정이 읽기 권한이 있는 버킷의 피부여자인지 확인합니다.

1. 버킷 정책이 연결되면 **Bucket policy(버킷 정책)**를 선택하여 버킷에 할당된 권한을 봅니다.