ConoHaでLet's Encryptの証明書を入手する

# HTTPS通信をしたい

HTTPSでWebサイトを表示させたいことはあると思います。
一応一昔前から無料でSSL証明書を発行できるサービスもあったのですが、ちょっと手間だったり、更新が面倒くさかったりします。

しかし、無料でSSL証明書を発行してくれるLet's Encryptはそこら辺結構簡単（準備ができればコマンド一発）だったりするので、ConoHaで使えるようにしたいと思います。

状況は以下です。

* OSはCentOS 7
* ドメイン `example.com` を持っているが、すでに色々設定しているため、 `conoha.example.com` をConoHaに割り当てて使いたい
* 証明書だけほしい
    * ApacheではなくNode.JSなどでHTTPS通信させたいなど。

Apacheだったりドメイン管理を全部ConoHaに任せきりにするなら、もう少し簡単な記事があるはずなので、そちらを参照してください。

## 下準備

### ドメインの設定

ConoHaの提供するDNSで特定のドメインを管理できるようにしておく必要があります。

ドメイン全てをConoHaで管理する場合は他の記事で紹介してるので探してください。

もし `example.com` を取得して色々使っていて、`conoha.example.com` 以下だけをConoHaの管理下に置きたい場合は、レジストラにNSレコードを追加してください。

追加するのは以下です。

```
ns-a1.conoha.io.
ns-a2.conoha.io.
ns-a3.conoha.io.
```

#### Value-Domainの場合

追加の仕方は各レジストラで異なると思うので、今回はValue-Domainの例を書いておきます。

ログインしていなければログイン。
ログインしていればコントロールパネルに移動します。

そこから無料ネームサーバー→ドメインのDNS設定とページを移動し、契約中のドメインのDNSを編集してください。

後は以下のNSレコードを追加すれば終了です。

```
ns conoha ns-a1.conoha.io.
ns conoha ns-a2.conoha.io.
ns conoha ns-a3.conoha.io.
```

これで `conoha.example.com` への問い合わせはConoHaのDNSに向かいます。

ちゃんと指定のドメインでVPSにアクセスできるようになれば大丈夫です。


#### ConoHaの設定

ConoHaは次のようにドメインを設定します。

##### DNSにドメイン追加

管理ページログイン後、左メニューのDNSに入り、ドメインを追加します（今回は `conoha.example.com` ）。

ドメイン名を入力するだけで追加は可能です。

追加されたら、次のレコードを登録します。

| タイプ | 名称 | TTL | 値 |
|--------|------|-----|----|
| A      | @    | 3600 | IPアドレス |

##### 逆引き設定

次に逆引きの設定もしておきます。

左メニューのサーバーから、設定するVPSの設定を開きます。

VPS設定の中に、PTRレコードなるものがあります。

ここのIPv4に設定するドメイン（今回は `conoha.example.com` ）を追加します。

これでConoHa側の設定は終わりです。

#### DNSの設定

これで完了です。
反映完了までしばらく待ちましょう。

digコマンドでレジストラのDNSに問い合わせをするなどで確認も可能です。

大雑把に以下のような結果になっていれば大丈夫です。

```
;; ANSWER SECTION:
conoha.example.com.	3539	IN	A	IPアドレス

;; AUTHORITY SECTION:
conoha.example.com.	59	IN	NS	ns-a1.conoha.io.
conoha.example.com.	59	IN	NS	ns-a3.conoha.io.
conoha.example.com.	59	IN	NS	ns-a2.conoha.io.
```

無事ドメインの設定が完了し、SSHなどで接続できるようになったら次の作業に移ります。

### ポート開放

ConoHaは最初Firewallでほとんどの通信が切られています。
証明書の特にhttp/https(80/443)ポートの開放が必要なので、開放します。

#### ポート確認

以下コマンドで現状を把握します。

```
firewall-cmd --list-all
```

多分初期状態だと以下のようになっているはずです。

```
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
```

#### HTTP/HTTPS通信の有効化

1,2行目のコマンドはroot権限が必要なので、一般ユーザーの場合は sudo を付けてください。

```
firewall-cmd --permanent --add-service=http --zone=public
firewall-cmd --permanent --add-service=https --zone=public
firewall-cmd --reload
```

#### 確認

再度確認します。

```
firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client http https ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
```

servicesのところに、`http` と `https` が追加されていれば完了です。

### 必要なアプリケーションとか

次に必要なものをインストールします。

面倒なのでroot権限で作業します。

```
yum install epel-release
yum install certbot python-certbot-apache
```

## 証明書の入手

めんどうなのでroot権限で作業します。

適当な作業ディレクトリを作ってそこに移動してください。

```
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/
```

ここで次のようなコマンドを実行して、証明書を入手します。
コマンド実行前に、Webサーバーが起動している場合は、一度終了しておいてください。

```
./letsencrypt-auto certonly --standalone --email your@email.address -d conoha.example.com
```

`--email` にはあなたのメールアドレスを指定してください。

`-d` には発行するドメインを指定してください。

実行後、次のように表示されれば成功です。

```
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/conoha.example.com/fullchain.pem. Your cert
   will expire on 2017-02-17. To obtain a new or tweaked version of
   this certificate in the future, simply run letsencrypt-auto again.
   To non-interactively renew *all* of your certificates, run
   "letsencrypt-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
```

これで `/etc/letsencrypt/live/conoha.example.com/` に証明書がダウンロードされます。

## 最後に

証明書の取得ができる状態までもってこれれば、後は更新もできるでしょう。

大雑把に証明書周りのファイルを見たところ、シンボリックリンクで本体は別のところにあるので、更新しても同じパスでアクセスできるようになっているようです。