

# IAM でサーバー証明書を管理する
<a name="id_credentials_server-certs"></a>

ウェブサイトまたは AWS のアプリケーションへの HTTPS 接続を有効にするには、SSL/TLS *サーバー証明書*が必要です。AWS Certificate Manager (ACM) によってサポートされているリージョンの証明書では、ACM を使用して、サーバー証明書をプロビジョン、管理、およびデプロイすることをお勧めします。サポートされていないリージョンでは、IAM を Certificate Manager として使用する必要があります。ACM がサポートするリージョンについては、「AWS 全般のリファレンス」の「[AWS Certificate Manager エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/acm.html)」を参照してください。

**重要**  
ACM は、サーバー証明書をプロビジョン、管理、デプロイするための推奨ツールです。ACM を使用すると、証明書をリクエストしたり、既存の ACM または外部証明書を AWS リソースにデプロイしたりできます。ACM で提供された証明書は無料で自動的に更新されます。[サポートされているリージョン](https://docs.aws.amazon.com/general/latest/gr/acm.html)では、ACM を使用して、コンソールまたはプログラムでサーバー証明書を管理できます。ACM の使用の詳細については、[https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)を参照してください。ACM 証明書のリクエストの詳細については、*AWS Certificate Manager ユーザーガイド*の「[パブリック証明書のリクエスト](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)」または「[プライベート証明書のリクエスト](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-private.html)」を参照してください。ACM へのサードパーティー証明書のインポートの詳細については、*AWS Certificate Manager ユーザーガイド*の「[証明書のインポート](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)」を参照してください。

[ACM でサポート](https://docs.aws.amazon.com/general/latest/gr/acm.html)されていないリージョンで HTTPS 接続をサポートする必要があるときにのみ、Certificate Manager として IAM を使用してください。IAM はプライベートキーを安全に暗号化し、暗号化されたバージョンを IAM SSL 証明書ストレージに保存します。IAM はすべてのリージョンでのサーバー証明書のデプロイをサポートしますが、AWS で使用するには、外部プロバイダーから証明書を取得する必要があります。ACM 証明書を IAM にアップロードすることはできません。また、IAM コンソールから証明書を管理することはできません。

IAM へのサードパーティー証明書のアップロードの詳細については、以下のトピックを参照してください。

**Topics**
+ [サーバー証明書をアップロードする (AWS API)](#upload-server-certificate)
+ [サーバー証明書の AWS API オペレーション](#id_credentials_server-certs-api)
+ [サーバー証明書のトラブルシューティング](#server-certificate-troubleshooting)

## サーバー証明書をアップロードする (AWS API)
<a name="upload-server-certificate"></a>

IAM にサーバー証明書をアップロードするには、証明書と対応するプライベートキーを提供する必要があります。証明書が自己署名されていない場合、証明書チェーンも提供する必要があります (自己署名証明書をアップロードするときに証明書チェーンは必要ありません)。証明書をアップロードする前に、これらの項目がすべてあり、以下の条件を満たしていることを確認します。
+ 証明書はアップロード時に有効である必要があります。有効期間の開始 (証明書の `NotBefore` 日付) 前、または有効期間の終了 (証明書の `NotAfter` 日) 後に証明書をアップロードすることはできません。
+ プライベートキーは非暗号化される必要があります。パスワードやパスフレーズで保護されたプライベートキーをアップロードすることはできません。暗号化されたプライベートキーの復号のヘルプについては、「[サーバー証明書のトラブルシューティング](#server-certificate-troubleshooting)」を参照してください。
+ 証明書、プライベートキー、および証明書チェーンはすべて PEM エンコードされる必要があります。これらの項目の PEM 形式への変換のヘルプについては、「[サーバー証明書のトラブルシューティング](#server-certificate-troubleshooting)」を参照してください。

[IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/) を使用して証明書をアップロードするには、[UploadServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html) リクエストを送信します。次の例では、[AWS Command Line Interface (AWS CLI) ](https://aws.amazon.com/cli/) を使用してこのオペレーションを行う方法を示します。例では、次のように想定しています。
+ PEM エンコードされた証明書は、`Certificate.pem` というファイルに保存されます。
+ PEM エンコードされた証明書チェーンは、`CertificateChain.pem` というファイルに保存されます。
+ PEM エンコードされ、非暗号化されたプライベートキーは、`PrivateKey.pem` というファイルに保存されます。
+ (オプション) キーバリューペアを使ってサーバー証明書にタグを付けるとします。例えば、証明書の特定と整理を行うために、タグキー `Department` と タグ値 `Engineering` を追加することが可能です。

次のコマンドの例を使用するには、これらのファイル名を独自のファイル名に置き換えます。*ExampleCertificate* をアップロードした証明書の名前に置き換えます。証明書にタグを付ける場合は、*ExampleKey* と *ExampleValue* タグのキーバリューのペアを独自の値に置き換えます。1 つの連続した行にコマンドを入力します。次の例では、読みやすくするために改行とスペースを追加しています。

```
aws iam upload-server-certificate --server-certificate-name ExampleCertificate
                                    --certificate-body file://Certificate.pem
                                    --certificate-chain file://CertificateChain.pem
                                    --private-key file://PrivateKey.pem
                                    --tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'
```

前のコマンドが成功すると、[Amazon リソースネーム (ARN)](reference_identifiers.md#identifiers-arns)、わかりやすい名前、識別子 (ID)、有効期限日、タグなど、アップロードされた証明書に関するメタデータを返します。

**注記**  
Amazon CloudFront で使用することを目的としてサーバー証明書をアップロードする場合、`--path` オプションを使用してパスを指定する必要があります。パスの先頭に `/cloudfront` を含め、末尾にスラッシュを含める必要があります（例: `/cloudfront/test/`）。

AWS Tools for Windows PowerShell を使用して証明書をアップロードするには、[Publish-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Publish-IAMServerCertificate.html&tocid=Publish-IAMServerCertificate) を使用します。

## サーバー証明書の AWS API オペレーション
<a name="id_credentials_server-certs-api"></a>

次のコマンドを使用して、サーバー証明書を表示、タグ付け、名前変更、削除します。
+ [GetServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html) を使用して証明書を取得します。このリクエストは、証明書、証明書チェーン (アップロードされた場合)、および証明書に関するメタデータを返します。
**注記**  
アップロード後に IAM からプライベートキーをダウンロードまたは取得することはできません。
+ [Get-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Get-IAMServerCertificate.html&tocid=Get-IAMServerCertificate) を使用して証明書を取得します。
+ アップロードされたサーバー証明書を一覧表示するには、[ListServerCertificates](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServerCertificates.html) を使用します。リクエストは、各証明書に関するメタデータを含むリストを返します。
+ アップロードしたサーバー証明書を一覧表示するには、[Get-IAMServerCertificates](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Get-IAMServerCertificates.html&tocid=Get-IAMServerCertificates) を使用します。
+ 既存のサーバー証明書にタグを付けするには、[TagServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagServerCertificate.html) を使用します。
+ Iサーバー証明書のタグを除するには、[UntagServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagServerCertificate.html) を使用します。
+ サーバー証明書の名前を変更するか、そのパスを更新するには、[UpdateServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServerCertificate.html) を使用します。

   次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します

  以下のサンプルコマンドを使用するには、古い証明書の名前、新しい証明書の名前、および証明書のパスを置き換え、1 つの連続した行にコマンドを入力します。次の例では、読みやすくするために改行とスペースを追加しています。

  ```
  aws iam update-server-certificate --server-certificate-name ExampleCertificate
                                      --new-server-certificate-name CloudFrontCertificate
                                      --new-path /cloudfront/
  ```

  AWS Tools for Windows PowerShell を使用してサーバー証明書の名前を変更するか、パスを更新するには、[Update-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Update-IAMServerCertificate.html&tocid=Update-IAMServerCertificate) を使用します。
+ サーバー証明書を削除するには、[delete\$1server\$1certificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServerCertificate.html) を使用します。

  AWS Tools for Windows PowerShell を使用してサーバー証明書を削除するには、[Remove-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Remove-IAMServerCertificate.html&tocid=Remove-IAMServerCertificate) を使用します。

## サーバー証明書のトラブルシューティング
<a name="server-certificate-troubleshooting"></a>

証明書を IAM にアップロードする前に、証明書、プライベートキー、および証明書チェーンがすべて PEM エンコードされていることを確認する必要があります。また、プライベートキーは非暗号化されていることも確認する必要があります。次の 例を参照してください。

**Example PEM エンコードされた証明書の例**  

```
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
```

**Example PEM エンコードされ、暗号化されていないプライベートキーの例**  

```
-----BEGIN RSA PRIVATE KEY-----
Base64-encoded private key
-----END RSA PRIVATE KEY-----
```

**Example PEM エンコードされた証明書チェーンの例**  
証明書チェーンには 1 つまたは複数の証明書が含まれます。テキストエディタ、Windows のコピーコマンド、または Linux の cat コマンドを使用して、ファイルをチェーンに連結します。複数の証明書を含めるときは、各証明書が、前述の証明書を認証する必要があります。そのため、証明書を連結して最後にルート CA 証明書を含めます。  
次の例には 3 つの証明書が含まれていますが、証明書チェーンに含まれている証明書はそれ以上またはそれ以下である可能性があります。  

```
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
```

これらの項目が IAM へのアップロードに適切な形式でない場合は、[OpenSSL](https://openssl.org/) を使用して適切な形式に変換できます。

**DER から PEM に証明書または証明書チェーンを変換するには**  
以下の例のように、[OpenSSL **x509** コマンド](https://openssl.org/docs/manmaster/man1/x509.html)を使用します。次のサンプルコマンドで、`Certificate.der` を、DER エンコードされた証明書を含むファイルの名前に置き換えます。`Certificate.pem` を、希望する出力ファイル名に置き換え、PEM エンコードされた証明書を含めます。  

```
openssl x509 -inform DER -in Certificate.der -outform PEM -out Certificate.pem
```
 

**DER から PEM にプライベートキーを変換するには**  
以下の例のように、[OpenSSL **rsa** コマンド](https://openssl.org/docs/manmaster/man1/rsa.html)を使用します。次のサンプルコマンドで、`PrivateKey.der` を、DER エンコードされたプライベートキーを含むファイルの名前に置き換えます。`PrivateKey.pem` を、希望する出力ファイル名に置き換え、PEM エンコードされたプライベートキーを含めます。  

```
openssl rsa -inform DER -in PrivateKey.der -outform PEM -out PrivateKey.pem
```
 

**暗号化されたプライベートキーを復号するには (パスワードやパスフレーズを削除)**  
以下の例のように、[OpenSSL **rsa** コマンド](https://openssl.org/docs/manmaster/man1/rsa.html)を使用します。次のサンプルコマンドを使用するには、`EncryptedPrivateKey.pem` を、暗号化されたプライベートキーを含むファイルの名前に置き換えます。`PrivateKey.pem` を、希望する出力ファイル名に置き換え、PEM エンコードおよび非暗号化されたプライベートキーを含めます。  

```
openssl rsa -in EncryptedPrivateKey.pem -out PrivateKey.pem
```
 

**証明書バンドルを PKCS\$112 (PFX) から PEM に変換するには**  
以下の例のように、[OpenSSL **pkcs12** コマンド](https://openssl.org/docs/manmaster/man1/pkcs12.html)を使用します。次のサンプルコマンドで、`CertificateBundle.p12` を、PKCS\$112 エンコードされた証明書バンドルを含むファイルの名前に置き換えます。`CertificateBundle.pem` を、希望する出力ファイル名に置き換え、PEM エンコードされた証明書バンドルを含めます。  

```
openssl pkcs12 -in CertificateBundle.p12 -out CertificateBundle.pem -nodes
```
 

**証明書バンドルを PKCS\$17 から PEM に変換するには**  
以下の例のように、[OpenSSL **pkcs7** コマンド](https://openssl.org/docs/manmaster/man1/pkcs7.html)を使用します。次のサンプルコマンドで、`CertificateBundle.p7b` を、PKCS\$17 エンコードされた証明書バンドルを含むファイルの名前に置き換えます。`CertificateBundle.pem` を、希望する出力ファイル名に置き換え、PEM エンコードされた証明書バンドルを含めます。  

```
openssl pkcs7 -in CertificateBundle.p7b -print_certs -out CertificateBundle.pem
```