SSLを利用するための自己証明書（オレオレ証明書）の設定メモ

__※2020/07/12 追記__

こちらの記事のほうがより詳細なことが書かれていますので、サクッと設定したい場合は本記事でも良いとは思いますが、ご興味ある方はこちらの記事もおすすめします。

[オレだよオレオレ認証局で証明書つくる](https://qiita.com/ll_kuma_ll/items/13c962a6a74874af39c6)


# SSLとは
SSL(Secure Socket Layer)とは、インターネット上で情報を暗号化し、送受信できるプロトコル（一般にhttps://と表記されるもの）。顧客情報やクレジットカード情報、その他、管理情報などを扱う際はこのSSLを利用してセキュアに通信する必要がある。

# SSLサーバー証明書
SSLを利用するにはSSLサーバー証明書をインストールする必要がある。正規にはサーバ証明書を購入する必要があるが、ここでは非正規の__自己証明書__を自分で作成する手順を記載。厳密には自己証明書とオレオレ証明書には違いがあるが、ここでは割愛。

### 秘密鍵(key)の作成
```bash
# モジュールのインストール
$ yum -y install mod_ssl

# 秘密鍵の作成
$ openssl genrsa -aes128 2048 > server.key
```

`-aes128`は暗号化方式。（詳しくはGoogle先生に…w）使用可能な暗号化方式を確認するには、`openssl enc --help`というコマンドを実行すれば一覧表示される。`2048`という数字は鍵の長さ。なにやら鍵の長さは__2048ビット以上が推奨__されているので、最低でも2048を指定する。拡張子は`.pem`もあるけど、個人的には「鍵」なので`.key`を使っている。

上記コマンドを実行すると、以下のようにパスフレーズを聞かれるので、任意のものを設定。

```bash

Generating RSA private key, 2048 bit long modulus
.............++++++......................++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase: パスフレーズ
Verifying - Enter pass phras: パスフレーズ
```

### 公開鍵の作成
ここでは CSR(Certificate Signing Request) ファイルを作成します．CSR とは 認証局に対し SSL サーバ証明書への署名を申請する情報が記載されているもの。具体的には，組織名やサーバのアドレスなど．

__※2021/4/28 追記__
@satoshi2001 さんにコメントご指摘いただきましたので，更新しました．


```bash
# 公開鍵の作成
# server.keyは先ほど作成したもの
$ openssl req -new -key server.key > server.csr
```

秘密鍵と同様に、上記コマンドを実行すると、以下のようにいろいろ聞かれるので、適宜変更して設定。

```bash

Enter pass phrase ofr server.key: パスフレーズ　　　←（任意）
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,
fi you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]: JP　　　←（国名）
State or Province Name (full name) [Some-state]: Tokyo　　　←（都道府県名？）
Locality Name (eg, city) []: Shibadaimon, Minato-ku　　　←（市区町村名？）
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Inc.　　　←（会社名）
Organizational Unit Name (eg, section) []: Example Section　　　←（？）
Common Name (eg, YOUR name) []: example.com　　　←（任意）
Email Address []: hoge@fuga.jp　　　←（メールアドレス）


Pleaseenter thee following 'extra' attributes to be sent with your certificate request
A challenge password[]: パスワード　　　←（任意）
An optional company name []: hogehoge　　　←（任意）
```

よく分からなかったら、パスフレーズとパスワード以外は空白でも問題なかった（はず）なので、そのままenterでも作成される。

### デジタル証明書(crt)の作成
__デジタル証明書__とは、公開鍵が真正である証明するデータ。正式なものでは、認証局（CA）を通してデータの作成者を証明することができる。
自分も詳しくは理解していないので、ちゃんと調べてみてください。

```bash
# デジタル証明書の作成
# server.keyは先ほど作成したもの
$ openssl x509 -in server.csr -days 365000 -req -signkey server.key > server.crt
```

こちらもコマンドを実行すると、再度パスフレーズを聞かれるので、入力。

```bash
Signature ok
subject=/C=JP/ST=Tokyo/L=Shibadaimon,Minato-ku/O=ExampleInc./OU=Example
Section/CN=example.com/emailAddress=hoge@fuga.jp

Getting Private key
Enter pass phrase ofr server.key: パスフレーズ
unable to write 'random state'
```

最後のパスフレーズはserver.keyを作成した時に設定したものを入力する。
以上で鍵、証明書の作成は終了。

### Apacheの設定
Apacheの設定では、通常のhttp(ポート:80)の設定とは別に、https(ポート:443)の設定を行う必要がある。（SSLではポート番号は443）

`/etc/httpd/conf/httpd.conf`または`httpd.conf`にてincludeされる`.conf`ファイルのどこでもいいので下記を追記。

```apache
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/httpd/conf/server.crt
    SSLCertificateKeyFile /etc/httpd/conf/server.key

    ... (以下httpでの設定と同様)
</VirtualHost>
```

鍵ファイルと証明書を上記で指定したディレクトリに移す。最後にApacheを再起動して完了。

以上、ではでは(=ﾟωﾟ)ﾉ