SSL証明書の設定


今回起きた事

事象:あるwebページがssh接続できなくなった。
原因:Apacheの設定に抜けがあり、自動更新がうまくいかず、SSL証明書の期限が切れた。
目標:SSL証明書を再発行する。

例えば、YahooのURLの🔒マークをクリックすると、SSL証明書を実際に見ることができる。

注) SSLとSSHの違い
・SSL(Secure Socket Layer) : ブラウザとwebサーバ間の暗号化
・SSH(Secure Shell) : ホスト間の暗号化
・SSHでは、通信する全ての相手の公開鍵を事前に渡す必要があるので、通信相手が100人なら100人分の公開鍵が必要。一方で、SSLは、認証局が発行した1つ証明書(これが1つの公開鍵に対応)が公開鍵の正当性を立証する。

環境

認証局 : Let's encrypt (証明書の有効期限は90日(約3カ月)で切れる。 変更不可。)
webサーバー : Apache/2.4.6(CentOS)
 

対応

まず、自動更新がうまくいっているか確認する。

約3ヶ月ごとにSSL証明書の有効期限が切れるため、3ヶ月に1回証明書を発行しないといけない。手動では大変なので、1ヶ月に1回cronを使って自動更新できるように設定している。(cronは、定期的なlogの取得などに使われる)

$ crontab -l # 設定されているcronを表示
5 0 * * * /bin/php -f /var/www/upload/cron.php RemoveController removeExpireFiles
0 2 * * * cd /var/www/test; /bin/php -f zoho.php Zoho searchProductsRecords
0 2 * * * cd /var/www/html; /bin/php -f zoho.php Zoho searchProductsRecords 
| | | | | 
分時日月年に対応。アスタリスクは、任意の整数。

# 毎月24日の朝4時に一括更新 
00 04 24 * * /home/xxxx/letsencrypt/letsencrypt-auto renew --force-renew && sudo systemctl reload httpd


# 実際に更新してみる
$ /home/xxxx/letsencrypt/letsencrypt-auto renew --force-renew
うる覚えだが以下のような感じで返ってきた。
→ 成功したファイル → xxx, yyy
→ 失敗したファイル → wp-stg.zzz (動作テスト用のWordPress)
→ IMPORTANT NOTE(注意)
→ 失敗したファイルについてAレコード(後で説明する)を確認せよ


# いわれた通りAレコードを確認
$nslookup 失敗したドメイン #(name serverの略)
→ IPアドレスが表示されたのでドメインと紐づけされていることを確認

他の原因としてアパッチの設定ファイルhttpd.cofの記述もれが考えられる。
OS毎に設定ファイルの場所は決まってるらしい。centOSなら/etc/httpd/conf/の下。

/etc/httpd
 ├ conf/
  │ ├ httpd.conf
  │ └ magic
  │
  ├ conf.d
  │ ├ xxx.conf
  │ ├ yyy.conf
  │ ├ wp.conf
  │ ├ ‥
  │ 

ややこしいのが、
/etc/httpd/conf.d ディレクトリは、Apacheを利用する他のアプリケーションたちを設定するディレクトリ。

そして、読み込まれる順番がポイントになる
http://www.go-next.co.jp/blog/server_network/4084/

以上を踏まえ…

# ⓶に当たる部分を設定。今回はWordPressの設定ファイルを見に行った。
$ less /etc/httpd/conf.d/wp.conf 

# ⓶の各ファイルの設定を⓷(VirtualHosts)の部分に記述していく。
$ less /etc/httpd/conf/httpd.conf # less後、sfift + g で一番下の行に行ける。 ⓷に行ける。

最後に、

# 設定ファイルを書き換えたら、Apacheに反映させる前にファイルの文法間違い等がないか、確認。
$ httpd -t
Syntax OK

# 設定ファイルに問題がないことが確認できたら、Apacheのサービスを再起動させて、設定を反映させる。
$ sudo systemctl reload httpd #systemctl [命令] [対象] #reloadとrestartは失敗したときの挙動が異なる。

設定ができたら、ブラウザからhttpsでアクセス。アクセス後、ブラウザから証明書が有効であるか確認。

参考
https://dev.classmethod.jp/cloud/aws/amazonlinux-apache24-ssl/
https://qiita.com/rimoenic/items/81385e08cf772ae5cfe4

勉強したLinuxコマンド

$su #ユーザを指定しないとrootユーザへ切り替わる
$sudo su  #rootユーザのパスワードが分からない場合は、sudoコマンドでrootユーザとしてsuコマンドを実行することができる。
$sudo su - #ハイフンでrootのカレントディレクトリに移動。

$history grep|ひっかけるワード

$ps #プロセス情報の表示。
$ps -ef|grep httpd #(e 全て, f 詳細)
$ps -ef|more 

その他

rootユーザー(神)の時、プロンプトは、#。⇔ exitで一般ユーザーへ