はじめてのおつかい！「SSL証明書」

# はじめに

外部に公開するWEBサイトを建てるため、サーバとセキュアな通信(HTTPS)をするためにSSLサーバ証明書を買うことになりました。

# SSLサーバ証明書が果たす役割とは

1. SSL/TLSの仕組みで、通信内容の盗み見や改ざんを防ぐ
1. 認証局(*)がWEBサイトの運営組織の実在を証明する

*認証局、通称CA：Certification Authorityと呼びます。
認証局が、サーバのドメイン名や組織情報を調査して、このWEBサイトは安全ですといった旨の証明書を発行します。

# SSLサーバ証明書の運用の流れ

1. WEBサイト運営者は、認証局にサイトのドメインを証明する証明書を申請する
1. 認証局は、運営者の申請内容を確認して、SSLサーバ証明書を発行する
1. サイトを閲覧する人は、証明書をブラウザで確認することができる

# ドメインとは

サーバーを識別するためにIPアドレスが使われます。
一方でIPアドレスは数字の羅列のため、人間には覚えにくいです。
ドメインは、人間でもわかるよう文字列でサーバを識別するものです。

# DNSとは

ドメイン名からIPアドレスを特定することを名前解決といいます。
名前解決する仕組みのことをDNS（Domain Name System）といいます。
DNSの仕組みは次のような流れです。

1. DNSサーバが管理するドメインであれば、登録されているIPを返す。
1. DNSサーバが管理するドメインのサブドメインであれば、サブドメインを管理するDNSサーバに問い合わせる
1. それ以外のドメインであれば、上位のDNSサーバ（.coや.jp）に問い合わせる。

# 

# SSL証明書のおつかい

まずはSSLの種類を決定します。

- **ドメイン認証**：ドメイン名の正しさを保証する
- 企業実在認証：ドメイン名と正しさとドメインを管理する会社の実在を保証する
- EV(Extended Validation)認証：ドメインを管理する会社の実在や信頼性まで保証する

WEBサイトに対してドメイン名（こちらで決めたURL）でアクセスできればよかったため、ドメイン認証にしました。


次に購入先を調査します。

- **セクティゴジャパン**
- さくらインターネット
- GMO
- KDDIウェブコミュニケーションズ

金額面と手軽さ（メール認証による申し込みが出来る）から、セクティゴジャパンに決定しました。

# SSL証明書をおつかいする流れ

## STEP1. 新規会員登録する

[新規会員登録](https://comodo.jp/navi/join)をします。

## STEP2. カートに入れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/18525e54-8c12-c017-19cf-48423108a391.png)

## STEP3. CSRを生成する

CSR（Certificate Signing Request）とは、認証局へ送信する署名リクエストを指します。CSRの実態は文字列です。

[こちらのサイト](https://knowledge.digicert.com/ja/jp/solution/SO23384.html)を参考に作成します。
私はWSL2（Windows10内で動くUbuntu）を利用しました。

```shell
# openssl genrsa -out （秘密鍵ファイル名） （キー長）
openssl genrsa -out private.key 2048
# openssl req -new -key （秘密鍵ファイル名） -out （CSRファイル名）
openssl req -new -key private.key -out private.csr

# 聞かれるので入力していきます。
# xxxは環境に合わせて修正します。
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chiyoda-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx Corporation
Organizational Unit Name (eg, section) []:xxx Dept
Common Name (e.g. server FQDN or YOUR name) []:xxx.co.jp
Email Address []:
A challenge password []:
An optional company name []:

# CSRの内容を確認する
less private.csr

# lessの閉じ方はQキーを押下する
```

# STEP4. 必要情報を入力する

サーバタイプはOtherを選択して、CSRキーを先程のキーの中身をコピペします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/dcf42cde-76e7-b06f-73c4-39b8204eaaef.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/f2867082-6575-4b20-36b3-f588f7e71525.png)

# STEP5. 発行手続き案内のメールを待つ

購入すると購入完了の旨のメールを受領します。
あとは証明書の発行手続きのメールを待ちます。
セクティゴジャパンの場合、以下３つの手続き方法がありました。

- **メール認証**
- WEB認証
- DNS認証

今回は、会社DNSサーバに中継してもらう制約上、メール認証を選択しました。

# STEP6. メールを受領してバリデーション

無事に購入手続きが完了すると、COMODOからメール認証の案内メールが届きます。
*To complete the domain control validation for this certificate, please click here*

click hereを押下して、メールに記載されているvalidation codeをコピペします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/110132aa-3233-b95a-4c62-89f54a8e98d5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/408630ed-d312-5c68-d420-188cecb63ed1.png)

無事にバリデーションが完了しました。

# STEP7. SSL証明書を変換する

SSL証明書であるCRTファイルをPFXファイル形式の証明書に変換します。
発行されたサーバ証明書CRTファイルと、CSRファイルを作る際に準備いただいた秘密鍵を利用して行います。
詳細は下記です。

https://knowledge.digicert.com/ja/jp/solution/SO23603.html

```shell
openssl pkcs12 -export -inkey <秘密鍵keyファイル名> -in <SSLサーバ証明書crtファイル名> -out <任意pfxファイル名>
# パスフレーズなしのPFXファイルがインポートできないことがあるので、パスフレーズを設定します。
```





以上です。