イントラネットでSSL (CentOS7 + Apache2.4 + Let's Encrypt)

## ▼ はじめに
内部ネットワークにある社内向けのウェブサイトをhttpsで接続する方法は、いくつかあると思います。

・オレオレ証明書（自己署名証明書）を発行して、ブラウザの警告を常に無視するとか
・たとえばアクティブディレクトリなどをプライベート認証局（オレオレ認証局）として開設して、証明書を発行してもらうとか
・『[イントラネットSSL](https://www.google.co.jp/search?q=%E3%82%A4%E3%83%B3%E3%83%88%E3%83%A9%E3%83%8D%E3%83%83%E3%83%88SSL)』なるものを購入するとか


この記事では、
**外部からイントラネットへの接続について、SSL認証の接続のみを許可する**方法で実現してみます。

下記を参考にさせていただきました。
⇒ [Let's Encryptにイントラサイトの証明書を発行してもらう](https://jyn.jp/letsencrypt-intra/)
⇒ [CentOS 7 + Apache 2.4 に Let’s Encrypt の証明書を導入する手順](https://weblabo.oscasierra.net/letsencrypt-2/)   

## ▼ 構成図
![ssl-intra.png](https://qiita-image-store.s3.amazonaws.com/0/112838/50fc64f1-a7d9-4a52-bfb7-96ee06909a80.png)


## ▼ リバースプロキシ
### ● Apacheのインストール、設定
```
# yum install httpd
# systemctl enable httpd
# mv -i /etc/httpd/conf.d/autoindex.conf  /etc/httpd/conf.d/autoindex.conf.orig
# mv -i /etc/httpd/conf.d/welcome.conf  /etc/httpd/conf.d/welcome.conf.orig
# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.orig
# vi /etc/httpd/conf.d/hoge.intra.conf
# vi /etc/httpd/conf.d/fuga.intra.conf
# vi /etc/httpd/conf.d/security.conf
```

```/etc/httpd/conf.d/hoge.intra.conf
<VirtualHost *:80>
  ServerName hoge.intra.example.com
  <Location /.well-known/>
    ProxyPreserveHost On
    ProxyPass http://172.16.0.101/.well-known/
    ProxyPassReverse http://172.16.0.101/.well-known/
  </Location>
</VirtualHost>
```

```/etc/httpd/conf.d/fuga.intra.conf
<VirtualHost *:80>
  ServerName fuga.intra.example.com
  <Location /.well-known/>
    ProxyPreserveHost On
    ProxyPass http://172.16.0.102/.well-known/
    ProxyPassReverse http://172.16.0.102/.well-known/
  </Location>
</VirtualHost>
```
`/etc/httpd/conf.d/security.conf` は下記とか参考にしてください

+ **Apacheセキュリティ設定**
	+ ( https\://qiita.com/bezeklik/items/1c4145652661cf5b2271 )

### ● Firewallの設定
```
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
```

### ● Apacheの起動
```
# apachectl configtest
# systemctl start httpd
```
## ▼ ウェブサーバ
### ● Apacheの設定
```
# cp -p /etc/httpd/conf/httpd.conf  /etc/httpd/conf/httpd.conf.orig
# sed -i -e 's/granted/denied/g' /etc/httpd/conf/httpd.conf
```
とりあえずすべての接続を拒否しておく

```
# vi /etc/httpd/conf.d/encrypt.conf
```

```/etc/httpd/conf.d/encrypt.conf
<VirtualHost *:80>
  ServerName hoge.intra.example.com
  DocumentRoot /var/www/lets_encrypt
  <Directory /var/www/lets_encrypt>
    Require all denied
  </Directory>
  <Directory /var/www/lets_encrypt/.well-known/>
    Require ip 192.168.0.253
  </Directory>
</VirtualHost>
```
`/var/www/lets_encrypt/.well-known/` はリバースプロキシのみ許可。
`/etc/httpd/conf.d/ssl.conf` あたりにも `Require ip` を書いて許可しておく
### ● Firewallの設定
```
# firewall-cmd --add-service=http --permanent
# firewall-cmd --add-service=https --permanent
# firewall-cmd --reload
```
### ● certbotのインストール、設定
```
# yum install epel-release
# yum install certbot
# mkdir /var/www/lets_encrypt
# certbot certonly --webroot -w /var/www/lets_encrypt -d hoge.intra.example.com
# echo "0 5 * * * root certbot renew --quiet" > /etc/cron.d/certbot
```
### ● Apacheの再起動
```
# cp -p /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.orig
# sed -i -e 's|^SSLCertificateFile.*|SSLCertificateFile /etc/letsencrypt/live/hoge.intra.example.com/cert.pem|' /etc/httpd/conf.d/ssl.conf
# sed -i -e 's|^SSLCertificateKeyFile.*|SSLCertificateKeyFile /etc/letsencrypt/live/hoge.intra.example.com/privkey.pem|' /etc/httpd/conf.d/ssl.conf
# sed -i -e 's|^SSLCertificateChainFile.*|SSLCertificateChainFile /etc/letsencrypt/live/hoge.intra.example.com/chain.pem|' /etc/httpd/conf.d/ssl.conf
# apachectl configtest
# systemctl restart httpd
```

おわり！