

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

# SSL 사용
<a name="workingsecurity-ssl"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

애플리케이션에 SSL을 사용하려면 먼저 인증 기관(CA)에서 디지털 서버 인증서를 가져와야 합니다. 간단히 하기 위해 이 안내서에서는 인증서를 생성한 다음 자체 서명합니다. 학습 및 테스트 용도에는 자체 서명된 인증서가 유용하지만 프로덕션 스택에는 항상 CA가 서명한 인증서를 사용해야 합니다.

이 안내서에서는 다음을 수행합니다.

1. OpenSSL을 설치 및 구성합니다.

1. 프라이빗 키를 만듭니다.

1. 인증서 서명 요청을 생성합니다.

1. 자체 서명된 인증서를 생성합니다.

1. 인증서 정보를 사용하여 애플리케이션을 편집합니다.

**중요**  
애플리케이션이 SSL을 사용하는 경우, 가능하다면 애플리케이션 서버 계층에서 SSLv3를 비활성화하여 [CVE-2014-3566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-3566)에 설명된 취약성을 해결하는 것이 좋습니다. 스택에 Ganglia 계층이 포함된 경우, 해당 계층에서도 SSL v3를 비활성화해야 합니다. 세부 사항은 구체적인 계층에 따라 다르므로 자세한 정보는 다음을 참조하세요.  
[Java 앱 서버 OpsWorks 스택 계층](layers-java.md)
[Node.js 앱 서버 OpsWorks 스택 계층](workinglayers-node.md)
[PHP 앱 서버 OpsWorks 스택 계층](workinglayers-php.md)
[Rails 앱 서버 OpsWorks 스택 계층](workinglayers-rails.md)
[정적 웹 서버 OpsWorks 스택 계층](workinglayers-static.md)
[Ganglia 계층](workinglayers-ganglia.md)

**Topics**
+ [1단계: OpenSSL 설치 및 구성](#w2ab1c14c57c29c15)
+ [2단계: 프라이빗 키 생성](#w2ab1c14c57c29c17)
+ [3단계: 인증서 서명 요청 생성](#w2ab1c14c57c29c19)
+ [4단계: 인증 기관에 CSR 제출](#w2ab1c14c57c29c21)
+ [5단계: 앱 편집](#w2ab1c14c57c29c23)

## 1단계: OpenSSL 설치 및 구성
<a name="w2ab1c14c57c29c15"></a>

서버 인증서를 생성하고 업로드하려면 SSL 및 TLS 프로토콜을 지원하는 도구가 필요합니다. OpenSSL은 RSA 토큰을 만들고 사용자의 프라이빗 키를 사용하여 서명하는 데 필요한 기본 암호화 기능을 제공하는 오픈 소스 도구입니다.

 다음 절차에서는 컴퓨터에 아직 OpenSSL이 설치되어 있지 않다고 가정합니다.

**Linux 및 Unix에서 OpenSSL을 설치하려면**

1. [OpenSSL: Source, Tarballs](https://www.openssl.org/source/)로 이동합니다.

1. 최신 소스를 다운로드합니다.

1. 패키지를 빌드합니다.

**Windows에서 OpenSSL을 설치하려면**

1. Microsoft Visual C\$1\$1 2008 재배포 가능 패키지가 시스템에 아직 설치되지 않은 경우 [패키지](https://www.microsoft.com/en-us/download/details.aspx?id=11895)를 다운로드하세요.

1. 설치 관리자를 실행하고 Microsoft Visual C\$1\$1 2008 재배포 가능 패키지 설치 마법사의 지침에 따라 설치합니다.

1. [OpenSSL: Binary Distributions](https://www.openssl.org/community/binaries.html)로 이동하여 환경에 맞는 OpenSSL 바이너리 버전을 클릭하고 설치 관리자를 로컬에 저장합니다.

1. 설치 관리자를 실행하고 **OpenSSL 설치 마법사**의 지침에 따라 바이너리를 설치합니다.

터미널 또는 명령 창을 열고 다음 명령줄을 사용하여 OpenSSL 설치 지점을 가리키는 환경 변수를 만듭니다.
+ Linux 및 Unix에서

  ```
  export OpenSSL_HOME=path_to_your_OpenSSL_installation
  ```
+ Windows

  ```
  set OpenSSL_HOME=path_to_your_OpenSSL_installation 
  ```

터미널 또는 명령 창을 열고 다음 명령줄을 사용하여 OpenSSL 이진수 경로를 컴퓨터의 경로 변수에 추가합니다.
+ Linux 및 Unix에서

  ```
  export PATH=$PATH:$OpenSSL_HOME/bin 
  ```
+ Windows

  ```
  set Path=OpenSSL_HOME\bin;%Path% 
  ```

**참고**  
이 명령줄을 사용한 환경 변수의 변경은 현재 명령줄 세션에만 유효합니다.

## 2단계: 프라이빗 키 생성
<a name="w2ab1c14c57c29c17"></a>

인증서 서명 요청(CSR)을 생성하려면 고유한 프라이빗 키가 필요합니다. 다음 명령줄을 사용하여 키를 생성합니다.

```
openssl genrsa 2048 > privatekey.pem
```

## 3단계: 인증서 서명 요청 생성
<a name="w2ab1c14c57c29c19"></a>

인증서 서명 요청(CSR)은 디지털 서버 인증서를 신청하기 위해 인증 기관(CA)으로 전송되는 파일입니다. 다음 명령줄을 사용하여 CSR을 생성합니다.

```
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.
```

다음 표는 인증서 요청을 생성할 때 참조할 수 있습니다.


**인증서 요청 데이터**  

| 이름 | 설명 | 예제 | 
| --- | --- | --- | 
| 국가 이름 | 해당 국가의 두 자리 ISO 약자. | US = 미국 | 
| 주 또는 지방 | 해당 조직이 위치한 주 또는 지방의 이름. 이 이름은 약어로 사용할 수 없음. | 워싱턴 | 
| 시 이름 | 해당 조직이 위치한 주 또는 시의 이름. | 시애틀 | 
| 조직 이름 | 해당 조직의 정식 이름. 조직 이름의 약칭을 사용하지 마세요. | CorporationX | 
| 조직 단위 | (선택 사항) 조직에 대한 추가 정보. | 마케팅 | 
| 일반 이름 | CNAME의 정규화된 도메인 이름. 이 이름이 정확하게 일치하지 않으면 인증서 이름 검사 경고를 받게 됩니다. | www.example.com | 
| 이메일 주소 | 서버 관리자의 이메일 주소 | someone@example.com | 

**참고**  
일반 이름 필드는 종종 잘못 이해하여 잘못된 이름을 입력하는 경우가 많습니다. 일반 이름이란 호스트에 도메인 이름을 붙인 것입니다. 예를 들면 "www.example.com" 또는 "example.com"와 같은 형태입니다. 정확한 일반 이름을 사용하여 CSR을 생성해야 합니다.

## 4단계: 인증 기관에 CSR 제출
<a name="w2ab1c14c57c29c21"></a>

프로덕션용으로 CSR을 인증 기관(CA)에 제출하여 서버 인증서를 얻으려면 다른 자격 증명이나 ID 증명이 필요할 수 있습니다. 신청이 성공하면 CA에서 디지털 서명된 자격 증명 인증서와 가능한 경우 체인 인증서 파일을 보내 줍니다. AWS는 특정 CA를 추천하지 않습니다. 이용 가능한 일부 CA 목록을 보려면 Wikipedia에서 [인증 기관 - 공급자](https://en.wikipedia.org/wiki/Certificate_authority#Providers)를 참조하세요.

테스트 용도로만 사용할 수 있는 자체 서명된 인증서를 생성할 수도 있습니다. 이 예제에서는 다음 명령줄을 사용하여 자체 서명된 인증서를 생성합니다.

```
openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out server.crt
```

다음과 비슷한 출력이 표시될 것입니다.

```
Loading 'screen' into random state - done
Signature ok
subject=/C=us/ST=washington/L=seattle/O=corporationx/OU=marketing/CN=example.com/emailAddress=someone@example.com
Getting Private key
```

## 5단계: 앱 편집
<a name="w2ab1c14c57c29c23"></a>

인증서를 생성하고 서명했으면 SSL을 사용할 수 있도록 앱을 업데이트하고 인증서 정보를 제공하세요. **앱** 페이지에서 세부 정보 페이지를 열 앱을 선택한 다음 **앱 편집**을 클릭합니다. SSL 지원을 활성화하려면 **SSL 활성화**를 **예**로 설정합니다. 그러면 다음 구성 옵션이 표시됩니다.

**SSL 인증서**  
퍼블릭 키 인증서(.crt) 파일의 콘텐츠를 상자에 붙여 넣습니다. 인증서는 다음과 비슷해야 합니다.  

```
-----BEGIN CERTIFICATE-----
MIICuTCCAiICCQCtqFKItVQJpzANBgkqhkiG9w0BAQUFADCBoDELMAkGA1UEBhMC
dXMxEzARBgNVBAgMCndhc2hpbmd0b24xEDAOBgNVBAcMB3NlYXR0bGUxDzANBgNV
BAoMBmFtYXpvbjEWMBQGA1UECwwNRGV2IGFuZCBUb29sczEdMBsGA1UEAwwUc3Rl
cGhhbmllYXBpZXJjZS5jb20xIjAgBgkqhkiG9w0BCQEWE3NhcGllcmNlQGFtYXpv
...
-----END CERTIFICATE-----
```
Nginx를 사용하고 인증서 체인 파일이 있는 경우, 콘텐츠를 퍼블릭 키 인증서 파일에 추가해야 합니다.
기존 인증서를 업데이트하는 경우, 다음을 수행합니다.  
+ **SSL 인증서 업데이트**를 선택해 인증서를 업데이트합니다.
+ 새 인증서가 기존 프라이빗 키와 맞지 않는 경우, **SSL 인증서 키 업데이트**를 선택합니다.
+ 새 인증서가 기존 인증서 체인과 맞지 않는 경우, **SSL 인증서 업데이트**를 선택합니다.

**SSL 인증서 키**  
프라이빗 키 파일(.pem 파일)의 콘텐츠를 상자에 붙여 넣습니다. 다음과 같이 보여야 합니다.  

```
----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC0CYklJY5r4vV2NHQYEpwtsLuMMBhylMrgBShKq+HHVLYQQCL6
+wGIiRq5qXqZlRXje3GM5Jvcm6q0R71MfRIl1FuzKyqDtneZaAIEYniZibHiUnmO
/UNqpFDosw/6hY3ONk0fSBlU4ivD0Gjpf6J80jL3DJ4R23Ed0sdL4pRT3QIDAQAB
AoGBAKmMfWrNRqYVtGKgnWB6Tji9QrKQLMXjmHeGg95mppdJELiXHhpMvrHtpIyK
...
-----END RSA PRIVATE KEY-----
```

[**인증 기관의 SSL 인증서**]  
인증서 체인 파일이 있는 경우, 콘텐츠를 상자에 붙여 넣습니다.  
Nginx를 사용하는 경우, 이 상자를 비워 두어야 합니다. 인증서 체인 파일이 있는 경우, **SSL 인증서**에서 퍼블릭 키 인증서 파일에 추가해야 합니다.

![\[SSL Settings interface with options for SSL 지원, Certificate, Key, and Certification Authorities.\]](http://docs.aws.amazon.com/ko_kr/opsworks/latest/userguide/images/app_ssl_settings.png)


[**저장**]을 클릭한 후 [애플리케이션을 다시 배포](workingapps-deploying.md)하여 온라인 인스턴스를 업데이트합니다.

[기본 제공 애플리케이션 서버 계층](workingcookbook-json.md#workingcookbook-json-deploy)의 경우 OpsWorks Stacks는 서버 구성을 자동으로 업데이트합니다. 배포가 완료되면 다음과 같이 OpenSSL 설치가 제대로 되었는지 확인할 수 있습니다.

**OpenSSL 설치를 확인하려면**

1. [**인스턴스**] 페이지로 이동합니다.

1. 애플리케이션 서버의 IP 주소를 클릭하거나 로드 밸런서를 사용하는 경우에는 로드 밸런서의 IP 주소를 클릭하여 앱을 실행합니다.

1. IP 주소 접두사를 **http://**에서 **https://**로 변경하고 브라우저를 새로 고쳐 SSL을 사용하여 페이지가 제대로 로드되는지 확인합니다.

사용자가 Mozilla Firefox에서 실행하도록 앱을 구성한 경우 다음과 같은 인증서 오류가 발생할 수 있습니다. `SEC_ERROR_UNKNOWN_ISSUER` 이 오류는 조직의 바이러스 백신 및 맬웨어 방지 프로그램의 인증서 교체 기능, 일부 유형의 네트워크 트래픽 모니터링 및 필터링 소프트웨어 또는 맬웨어로 인해 발생할 수 있습니다. 이 오류를 해결하는 방법에 대한 자세한 내용은 Mozilla Firefox 지원 웹 사이트의 [보안 웹 사이트에서 보안 오류 코드의 문제를 해결하는 방법](https://support.mozilla.org/en-US/kb/error-codes-secure-websites?redirectlocale=en-US&redirectslug=troubleshoot-SEC_ERROR_UNKNOWN_ISSUER#w_monitoringfiltering-in-corporate-networks)을 참조하세요.

사용자 지정 계층 등 다른 모든 계층의 경우, OpsWorks Stacks는 앱의 [`deploy` 속성](workingcookbook-json.md#workingcookbook-json-deploy)에 SSL 설정을 단순히 추가합니다. 노드 객체에서 정보를 검색하고 서버를 적절히 구성하려면 사용자 지정 레시피를 구현해야 합니다.