[AWS IoT]証明書の作成、登録方法イロハ Part1

# AWS IoTでの証明書の作成

AWS IoTにおいてモノとセキュアに通信を行うために、認証を行う必要があります。AWS IoTにおいては、いくつかの認証の方法が提供されています。サポートされている認証方法は、１）Cognitoによる認証、２）IAMによる認証、３）X.509クライアント証明書による認証、4）カスタム認証がありますが、今回は3）のX.509クライアント証明書による相互認証を行う際に必要なクライアント証明書の作成方法、登録方法について試してみます。
AWSからの[ドキュメント](https://pages.awscloud.com/rs/112-TZM-766/images/EV_iot-deepdive-aws2_Sep-2020.pdf)にクライアント証明書の登録方法についての解説がありますが、今回実際にどのように行うのか試してみます。

# 1click証明書作成
まずは一番オーソドックスな1click証明書作成です。AWS IoTのマネジメントコンソールから 安全性＞証明書から作成ボタンをクリックし、一番上の証明書を作成を選択します。
![スクリーンショット 2021-07-19 13.26.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/7fd7515c-d2b0-2f90-fe29-9eaa759df067.png)
すぐに証明書が作成されるので、証明書、パブリックキー、プライベートキーをダウンロードします。AmazonのルートCAもダウンロードして、有効化ボタンをクリックして証明書を有効化します。
![スクリーンショット 2021-07-19 13.29.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/6fe05eba-e0fe-594e-5435-91b48d7e0743.png)
証明書には、そのモノでどのようなことを実行できるかを示すポリシーを設定する必要があります。例えば、こちらの[例](https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/certificate-policy-examples.html)のよう証明書の certificateId に名前が等しいトピックに発行するアクセス許可が付与するようにするなど、モノにどのような権限を与えるかを考慮して設定します。ポリシーをアタッチをクリックします。すでに定義済みのPolicyを選択するか、新規にPolicyを作成するかを行います。
![スクリーンショット 2021-07-19 13.39.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/20c66804-4c74-1577-1363-f8756ca18b1f.png)

上記の例では、このモノに対してiot:Publishのアクションをtopic/testのトピックに行うことを許可しています。これで証明書の作成は完了です。こちらの[投稿の例](https://qiita.com/tsugunao/items/576775fb185db7b1de2c)のようにこの証明書を使って通信を行うことができます。

# CSRによる証明書の作成
次にCSRによる証明書の作成です。CSRとはCertificate Signing Requestの略で、証明書署名リクエストの意味です。手元の秘密鍵からcsrと呼ばれている証明書リクエストファイルを作成して証明書の作成を行います。CSRには秘密鍵が必要なので以下のopensslコマンドで鍵長2048bitのRSA鍵を生成します。

```
$ openssl genrsa -out privatekey.pem 2048
Generating RSA private key, 2048 bit long modulus
.............................................................+++
.....+++
e is 65537 (0x10001)
```
次に以下のコマンドでcsrファイルを作成します。

```
$ openssl req -new -key privatekey.pem -out cert.csr
```
以下のように表示され、Country NameやOrganization Nameなど入力を求められるので適宜入力します。

```
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.
-----
Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []:
Email Address []:
error, no objects specified in config file
problems making Certificate Request
[tsugunao ~/Work/iot/CSR]$ openssl req -new -key privatekey.pem -out cert.csr
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.
-----
Country Name (2 letter code) []:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) []:Tokyo
Organization Name (eg, company) []:MyOrg
Organizational Unit Name (eg, section) []:MySection
Common Name (eg, fully qualified host name) []:AWS IoT Cert
Email Address []:

```
cert.csrというファイルが作成されるので、CSRによる作成からファイルを選択しアップロードします。
![スクリーンショット 2021-07-19 14.07.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/a41b0395-270b-1265-5aee-82d12b4931bb.png)

すると以下のように証明書が作成されるので、ダウンロードし、有効化した上でポリシーのアタッチを行います。
![スクリーンショット 2021-07-19 14.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/7633036d-09b1-67a7-7c1d-864169c6a848.png)

# まとめ
1click証明書作成および、CSRによる証明書の作成手順を紹介しました。本日紹介した証明書の作成方法は、Amazonで管理しているCAを使用しているためCAの運用はAmazon任せで不要となりますが署名書の有効期限は固定となります。1click証明書で証明書を作成する場合には秘密鍵をネットワーク経由でダウンロードすることが必要になり、秘密鍵をネットワークに通したくない場合にはCSRによる証明書の作成が有効です。

次回以降、自分でCAを管理して証明書を作成する手順について紹介したいと思います。