【AWS初心者向け】AWS Certificate Manager (ACM) 証明書の手動更新方法

この記事は[レコチョク Advent Calendar 2022](https://qiita.com/advent-calendar/2022/recochoku)の17日目の記事となります。

はじめまして。中途採用2年目でバックエンドエンジニアをしている徐と申します。

私たちのサービスであるTOWER CLOUD（タワークラウド）は、2020年5月にリリースされて以来、たくさんのユーザーが楽曲を配信しています。TOWER CLOUDでは、楽曲を登録するだけで、Apple Music、Spotify、LINE MUSIC、レコチョクなど、世界中の音楽配信ストアで楽曲を販売することができます。

これにより、アーティストは販売や再生に応じて収益を得ることができます。今後も、たくさんの機能を追加する予定ですので、ぜひご注目ください。
さらに詳しく知りたい方は、以下のリンクをご確認ください。
https://towercloud.jp/distribution/

# はじめに
本記事は、「SSL証明書とは」、「SSL証明書を使うメリットは何か」、「AWS Certificate Managerを利用したSSL証明書の手動更新方法が知りたい」などの疑問にお答えします。

# 本記事について
##  １．内容に関して
- 本記事は、「IT知識が少ない」、「AWS経験が浅い」、「AWS Certificate Managerの具体的な利用方法が分からない」方向けの記事となります。この記事を読むことで、それらの理解の助けになれば幸いです。

- AWS Certificate Managerを利用したSSL証明書を手動更新するための記事はたくさんありましたが、AWSのアップデートによりUIや仕様が変更されているため、現在のUIや仕様に合わせた解説記事を見つけることが出来ませんでした。それにより自分自身が困ったので、今回の記事を投稿しました。

##  ２．AWS Certificate Managerとは
AWS Certificate Manager（以下、ACM）とは、AWSで提供されているSSL証明書の発行サービスとなります。ACMを利用することで、簡単かつ安価にSSL証明書の更新ができます。

ACMが発行したSSL証明書は、ユーザーのプライベートネットワークリソースや、AWSの様々なサービスに適応することが出来ます。

##  ３．制限事項
- 有効期間が迫っているACMでSSL証明書を管理/運用しているが、具体的な更新方法が分からない方が対象となります。なので、ACMを利用したSSL証明書の手動更新方法の手順に焦点を当てております。AWS上での構築や、ACMの利用方法などについては割愛をさせていただきます。

- TLSはSSLの次世代規格のため、本記事ではSSLと呼んでいますが、実質は「TLS」も含めております。

- 本記事で紹介している内容や手順は、2022/12/09時点のものとなります。また、前述したようにAWSのアップデートによりACMのUIや仕様が変更になる可能性がありますので、添付した画像などの内容が古くなることもご了承をいただきます。

## ４． 実行環境

macOS Monterey 　バージョン: 12.2.1
Google Chrome　　バージョン: 108

## ５． この記事で伝えたいこと

- SSL証明書とは
- SSL証明書の種類
- SSL証明書のメリット
- **AWS Certificate Manager を用いた証明書の手動更新手順（←重要）**

## ６． 解決したい課題

- SSL証明書についてより理解
- ACMを利用したSSL証明書の手動更新の実現

# 具体的な内容（SSL証明書に関して）
## １．まずSSLとは
[情報セキュリティ関連の技術 - 総務省サイト](https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/glossary/11.html#s08)より引用：

>  Secure Socket Layer（セキュア・ソケット・レイヤ）の略。 インターネットにおいてデータを暗号化したり、なりすましを防いだりするためのプロトコルのこと。ショッピングサイトやインターネットバンキングなど、個人情報や機密情報をやり取りする際に広く使われています。 利用者は、認証機関により発行されたサーバ証明書によって、サーバの真正性を確認します。現在は、SSL3.0をもとに改良が加えられたTLS1.2が標準的なプロトコルとして利用されています。

## ２．SSLの仕組み
[情報セキュリティ関連の技術 - 総務省サイト](https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/basic/structure/03.html)より引用：
>  SSL（Secure Socket Layer）とは、インターネット上でデータを暗号化して送受信する仕組みのひとつです。クレジットカード番号や、一般に秘匿すべきとされる個人に関する情報を取り扱うWebサイトで、これらの情報が盗み取られるのを防止するため、広く利用されています。また、SSLは暗号化に加え、電子証明書により通信相手の本人性を証明し、なりすましを防止するなど、今日のインターネットの安心・安全を支えています。

 >   SSLは、WebサーバとWebブラウザとの通信においてやりとりされるデータの暗号化を実現する技術です。たとえば、インターネットバンキングで利用者登録する場合などは、このSSLを使ったホームページが使われます。ここで入力された情報は暗号化され、金融機関のWebサーバに送られるのです。これにより、通信の途中で情報が盗み見られることを防いでいます。

>  Webブラウザにより、SSLを使ったサイトに接続するには、http://･･で始まるアドレスではなく、https://･･で始まるアドレスのサイトに接続します。SSLを利用したサイトに接続すると、アドレスバーの色が緑色に変わったり錠のマークが表示されたりします。これらにより、SSL通信を使っているサイトかどうかを確認することができます。

 >  電子証明書などの詳細な情報を確認できます。Webブラウザの種類やバージョンによっては、他の場所に保護を示すマークが表示されますので、普段、使用しているWebブラウザではどこにどのようなマークが出るかということを、あらかじめ確認しておくのがよいでしょう。

## ３． SSL証明書とは
[AWSセキュリティ、アイデンティティ、コンプライアンス](https://aws.amazon.com/jp/what-is/ssl-certificate/)のページから一部抜粋：

 >  SSL 証明書は、システムがアイデンティティを検証し、その後、Secure Sockets Layer/Transport Layer Security (SSL) プロトコルを使用して別のシステムへの暗号化されたネットワーク接続を確立できるようにするデジタルオブジェクトです。証明書は、公開鍵基盤 (PKI) と呼ばれる暗号化システム内で使用されます。PKI では、双方が認証機関と呼ばれるサードパーティを信頼している場合に、証明書を使用して一方から他方のアイデンティティを確立する方法となります。したがって、SSL 証明書は、ネットワーク通信を保護し、インターネットを介したウェブサイトと、プライベートネットワーク上のリソースのアイデンティティを確立するためのデジタルアイデンティティカードとして機能します。

上記の内容を簡単にまとめると、SSLサーバ証明書とは「SSLによる暗号化された通信の実現」と「Webサイトの運営元の証明」の2つの機能を合わせ持つ電子証明書となります。SSL証明書を利用することで、提供するWebサイトの信頼性を保証することで、それの利用者は安全にアクセスすることが出来ます。
近年、無料SSL証明書の普及により、SSL証明書の取得コストが大幅に低下しました。そのため、多くの偽サイト（フィッシングサイト）がSSL化するようになったため、SSL化されたサイト＝絶対安全なサイトではないことを認識していただければと思います。（理由については本記事の主旨ではないため割愛させていただきます。）

## ４．SSL証明書の種類

### 1.  ドメイン(DV)認証
DV証明書のDVは「Domain Validation 」の略で、SSL証明書中に一番取得しやすい認証です。個人も取得できかつ最近無料のものもあるため、手軽い発行できる反面、犯罪者に利用されるケースも増えています。

### 2.  組織(OV)認証
OV証明書のOVは「Organization Validation」の略で、直訳すると「組織の検証」。つまり組織（企業）認証です。ドメイン(DV)認証とは異なり、個人は取得することができないためドメイン(DV)認証より信頼性が高いです。

### 3.  EV認証
EV証明書のEVは「Extended Validation」の略で、三つの認証種類の中でもっとも厳格な認証です。OV認証の取得よりも多くの提出書類と時間が必要です。

##  ５． SSL証明書のメリット
SSL証明書のメリットはたくせんありますが、個人的に重要だと考えた点を以下にまとめました。

### 1.  個人データの保護
WebブラウザとWebサイト間の通信は、ネットワーク盗聴により盗聴される可能性があります。SSL通信を使用することで、データを暗号化することができるため、例えばWebサイトで買い物をする場合には、個人情報や決済情報を安心して入力できます。

### 2. サイトの利便性 / 信頼性の向上
HTTPプロトコルのバージョンアップに伴い、非SSL通信よりもSSL通信の方が高速な通信が可能となりました。SSL証明書を使用しているサイトは、信頼を得ることで利用者に安心感を与えられます。

### 3. セキュリティー対策
SSL化されたWebページから別ドメインのページに遷移する際には、Webブラウザ上に警告が表示されます。それにより、意図しないWebサイトに飛ばされることを防ぐことができます。
![スクリーンショット 2022-12-16 15.34.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/4fcf4469-b4b0-03c2-32a0-2bc5cff7b575.png)

### 4.  SEO改善
特に検索サービスの大手であるGoogle社は、近年WebサイトのSSL化を推進しています。Googleの検索順位を決める際のアルゴリズムにおいて、SSL化したページが優遇されています。非SSL化サイトの場合はブラウザのアドレスバーに「保護されていない通信」と警告が表示されます。安全なWebサイトのほうがユーザーは安心してアクセスができるため、Webサイトのアクセス数を増やしたい場合は必須な設定になります。
![スクリーンショット 2022-12-12 20.54.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/d86ad741-a839-44ff-cb6f-fbcedd48a2e5.png)

# 具体的な内容（ACMを利用したSSL証明書の更新方法）
## AWS Certificate Manager を用いた証明書の手動更新手順
上記の内容を踏まえて、ここからは具体的な更新手順を説明いたします。

### 1. SSL証明書の取得
弊社の各サービスサイトに使われているSSL証明書は基本的に中間認証局（ベンダー）によって発行されています。
(分かりやすいように、ファイル名は発行時間などに変更しています。)

![スクリーンショット 2022-12-12 21.14.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/c0109b69-908d-ee93-7b66-64b879042e0d.png)

### 2. AWS リージョンを確認
- AWS Certificate Managerで管理しているSSL証明書に関連付けられたサービスによって異なるリージョンに使われているケースもあるため、利用する際にまずリージョンを確認しましょう。（本記事は東京リージョンを例にします。）

### 3. ブラウザで現状の有効期限を確認

ブラウザにある「南京錠アイコン」をクリック、「この接続は保護されています」の部分を押下

![スクリーンショット 2022-12-13 10.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/7de3d4fb-5769-f497-2aaa-55e691c43bf1.png)

「証明書は有効です」の部分を押下。

![スクリーンショット 2022-12-13 10.24.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/8a361c00-d1b5-8b4c-7eed-5a7e50ffa9b1.png)

 証明書ビュアーは表示され、有効期限の確認ができます。

![スクリーンショット 2022-11-14 16.04.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/4bd35921-bf80-d446-524b-6086ef58322f.png)

### 4.  AWS Certificate Managerで有効期限を確認
 AWSのコンソール画面で「Certificate Manager」を検索。
![スクリーンショット 2022-12-13 10.43.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/d8f92abf-f929-c0a7-4c63-e5e8052c6515.png)
ドメイン名の「証明書 ID」中のリンクをクリック、詳細画面に遷移。
![スクリーンショット 2022-12-15 15.46.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/ee90a840-02b1-658f-9c16-7ddf7403134c.png)

「詳細」カテゴリで確認。
![スクリーンショット 2022-12-16 18.39.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/fa9ef736-4241-ddce-1596-9d7edcca0a63.png)

### 5. 更新したいドメイン名を選択

「証明書 ID」中のリンクをクリック、
![スクリーンショット 2022-12-16 18.31.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/8b2c2539-7308-7581-2f8f-802fa840d963.png)

「再インポート」を押下。
![スクリーンショット 2022-12-16 18.31.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/f8d228f6-af72-1bb6-686d-e7ac5543dd73.png)

### 6. SSL証明書の詳細を入力（中身は間違いのないように！！）
 取得したSSL証明書をエディッタで開き、ファイルの中身をコピーして下記の枠に貼り付ける。
![スクリーンショット 2022-12-16 18.23.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/daa1ef54-f5dc-f886-ff80-27eb3618db27.png)

**証明書本文(必須)**
> 外部認証局から発行された証明書(*.cer)
-----BEGIN CERTIFICATE-----から始まるファイル

**証明書のプライベートキー(必須)**
> 秘密鍵(プライベートキー)ファイル(*.key)
-----BEGIN PRIVATE KEY-----から始まるファイル

 **証明書チェーン**
>中間証明書（*.txt）
-----BEGIN CERTIFICATE-----から始まるファイル

### 7. 問題がなければ「次へ」ボタンを押下
![スクリーンショット 2022-12-16 18.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/680c59a1-b9a8-512b-2b13-c5494f2105c8.png)

### 8. 結果画面を確認し、問題がなければ「インポート」ボタンを押下

適応したSSL証明書の有効期間は１年後となるため、新しいSSL証明書の値が約１年後に延長されました。

![スクリーンショット 2022-12-16 18.23.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/fcf32d70-63f0-1b57-779e-d54b6ae66505.png)


### 9. 更新後の有効期限を確認

 AWS Certificate Managerの「詳細」カテゴリの有効期限が更新されているか確認。

![スクリーンショット 2022-12-16 18.24.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/17b5ffcb-6791-f102-e55f-637dd34e0b11.png)

ブラウザでSSL証明書ビューアの有効期が更新されているか確認：
ブラウザにある「南京錠アイコン」をクリック、「この接続は保護されています」の部分を押下。

![スクリーンショット 2022-12-13 10.24.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/8a361c00-d1b5-8b4c-7eed-5a7e50ffa9b1.png)

「証明書は有効です」の部分を押下。
![スクリーンショット 2022-12-13 10.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/7de3d4fb-5769-f497-2aaa-55e691c43bf1.png)
![スクリーンショット 2022-12-16 18.25.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2423004/baba44d6-e822-d723-7eeb-0b8982c20b00.png)

# まとめ
本記事では、SSL証明書に関する基本的な知識と、ACMを利用したSSL 証明書の手動更新方法ついてご紹介しました。この記事が皆さまのお役に少しでも立てば幸いです！最後まで読んでいただきありがとうございました。

明日の[レコチョク Advent Calendar](https://qiita.com/advent-calendar/2022/recochoku)は18日目【iOS】SnapKitの概要と実装例です。お楽しみに！

## 参考文献
[情報セキュリティ関連の技術 - 総務省サイト](https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/glossary/11.html#s08)

[AWSのACMとは？ACMを利用するメリット5つとポイントを解説](https://www.fenet.jp/aws/column/aws-beginner/366/)

[AWSセキュリティ、アイデンティティ、コンプライアンス](https://aws.amazon.com/jp/what-is/ssl-certificate/)

[SSLサーバ証明書の種類と利用用途](https://jp.globalsign.com/ssl/about/types-of-ssl.html#:~:text=SSL%E3%82%B5%E3%83%BC%E3%83%90%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AF%E3%80%81%E3%82%B5%E3%82%A4%E3%83%88%E9%81%8B%E5%96%B6%E5%85%83%E3%81%AE%E7%A2%BA%E8%AA%8D,%E3%82%BF%E3%82%A4%E3%83%97%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)

##
この記事はレコチョクのエンジニアブログの記事を転載したものとなります。

https://techblog.recochoku.jp/8847