IT pass HikiWiki - [Memo2018][ITPASS]Apache のインストールと設定 Let's encrypt による証明書の設定 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
= SSL 用の証明書の作成
== openssl の設定を変更
/etc/ssl/openssl.cnf について以下の二点の変更を加えた.
* [usr_cert] セクションにある nsCertType=server のコメントアウトを外した.
* [v3_ca] セクションにある nsCertType=sslCA,emailCA のコメントアウトを外した.
== Let's encrypt による証明書の設定
以前はプライベート証明書を用いていたが,
現在は Let's encript (https://letsencrypt.org/) を利用した
証明書の設定を行った.
Let's Encrypt 総合ポータル (https://letsencrypt.jp/) の
Let's Encrypt の使い方 (https://letsencrypt.jp/usage/) に従って作業した.
=== 作業用ディレクトリの作成
作業ディレクトリを作成する.
$ sudo -s
# cd /usr/local/src
# mkdir certbot
# cd certbot
=== certbot のダウンロード
Let's Encrypt では, Debian 用に certbot のパッケージが用意
されている. しかし, このパッケージは apache2 の Debian パッ
ケージに依存しているため, apache をソースから手動で make
している itpass サーバでは使えない.
そのため, https://certbot.eff.org/ から, 下のようにして
certbot をダウンロードしてインストールする.
"Software" に apache を選択.
"System" に "Other UNIX" を選択.
当該ページの説明に従って, 下のように作業した.
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
=== 証明書の発行
ダウンロードした certbot-auto を使って itpass.scitec.kobe-u.ac.jp 用の
証明書を発行した.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/itpass/public_html \
-d tako-itpass.scitec.kobe-u.ac.jp
同様に, epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp 用の証明書を発行する.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/epalab/public_html \
-d epa.scitec.kobe-u.ac.jp
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/aoelab/public_html \
-d aoe.scitec.kobe-u.ac.jp
どれも /home 以下のディレクトリが存在せず, エラーが出たので /home 以下に/itpass/public_html , /aoelab/public_html , /epalab/public_html を作成した.
もう一度 ./certbot-auto を itpass aoe epa に対して行うと,
下のように聞かれるた.
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel:
A とした.
さらに下のように聞かれた.
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o:
N とした
なお, certbot-auto のオプションの意味は下の通り.
* --webroot
既に動作中のウェブサーバ上で, ウェブサーバを停止せずに証明書を発行する.
* certonly
apache の設定ファイルを自動で書き換えずに証明書を取得するのみ.
証明書は /etc/letsencrypt に置かれる.
* --webroot-path
RootPath の設定
* --email
初回実行時にメールアドレスを尋ねられなくするためのオプション.
つけなくて良かったような気がする.
=== apache への証明書の設定
/usr/local/apache2/conf/extra/httpd-ssl.conf を編集して発行した証明書を設定する.
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
編集箇所は下の通り.
ServerName itpass.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/privkey.pem"
ServerName aoe.scitec.kobe-u.ac.jp:442
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/privkey.pem"
ServerName epa.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/privkey.pem"
=== 証明書更新のテスト
Let's encrypt の証明書の有効期限は 90 日である.
このため, certbot-auto には簡単に証明書を更新する方法が存在する.
その方法を設定する.
まずは下のようにして更新をテストした.
# ./certbot-auto renew --dry-run
更新されたかを確認するため /var/log/letsencrypt/letsencrypt.log の中身を確認した.
証明書の更新を定期的に実行するために cron のためのスクリプトを設定する.
下の内容の /etc/cron.local/daily/240_letsencrypt_renew を作成した.
#!/bin/sh
#
#= Renew certificate
#
MAINTAINERS="Yoshiyuki O. Takahashi"
UPDATE='2018-04-25'
VERSION='1.0'
REFERENCES='none'
COMMAND='/usr/local/src/certbot/certbot-auto'
DRYRUN='--dry-run'
DRYRUN=''
$COMMAND renew $DRYRUN
実行権限を与えた.
下のように動作テストを行い, 問題なく動作することを確認した.
(ただし, この時点では証明書が新しいため更新されなかった.)
# /etc/cron.local/daily/240_letsencrypt_renew
=== 参考ページ
* ((<certbot - Apache on Other UNIX|URL:https://certbot.eff.org/lets-encrypt/pip-apache>))
* ((<Let's Encrypt の使い方|URL:https://letsencrypt.jp/usage/>))
* ((<Let's Encrypt ユーザーガイド|URL:https://letsencrypt.jp/docs/using.html#renew-subcommand>))
* ((<Let's EncryptでWebサイトSSL化に挑戦したら簡単過ぎた|URL:https://www.tetsis.com/blog/?m=201710>))
= 動作チェック
* apache を起動
* apache は /usr/local/apache2/bin/apachectl で起動/停止する
# /usr/local/apache2/bin/apachectl -k start
* 起動したかどうかを以下のコマンドで確認した.
# ps aux | grep http
ここで apache が起動できていなかったため, 画面左端に www-data と表示は出なかった.
* apache のエラーログ /var/log/httpd-error.log を確認すると, 末尾に
[Tue Nov 06 17:19:09.874475 2018] [ssl:emerg] [pid 1734:tid
140226041945728] AH02311: Fatal error initialising mod_ssl, exiting.
See /var/log/httpd-ssl-error.log for more information
と記述されていた.
= SSL 用の証明書の作成 (参照 : 2016 年度サーバ構築ログ)
従来の方法で SSL 証明書を作成することにした.
=== プライベート CA の作成
apache の config ディレクトリに入り, 次のように証明書を格納するディレク
トリを作成した.
# cd /usr/local/apache2/conf
# mkdir ca
# cd ./ca/
# mkdir {itpass,epa,aoe のそれぞれの名称で作成}
以下の作業は ServerName : itpass.scitec.kobe-u.ac.jp,
epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp
のそれぞれについて行った. サーバ名を適宜読みかえ, 3 回実行する.
((*< 3 回実行した作業 ここから>*))
秘密鍵を生成した.
# openssl genrsa -out itpass.key 2048
公開鍵を生成した(SHA-2(256)形式).
# openssl req -new -sha256 -key itpass.key -out itpass.csr
Country Name (2 letter code) [AU]: JP
State or Province Name (full name) [Some-State]: Hyogo
Locality Name (eg, city) []: Kobe
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Kobe
University
Organizational Unit Name (eg, section) []: ITPASS (epa, aoe のときはそれぞれ "EPA lab.", "AOE lab." として登録)
Common Name (eg, YOUR name) : itpass.scitec.kobe-u.ac.jp (ここは
itpass の他に, epa, aoe の分をそれぞれ作成する)
Email Address: itpadmin_at_itpass.scitec.kobe-u.ac.jp (ここは同じ)
A challenge password: (空で Enter)
A optional company name: (空で Enter)
自己署名証明書を作成.
# openssl x509 -req -in itpass.csr -signkey itpass.key -out itpass.crt
生成された鍵や証明書をディレクトリに格納した.
((*< 3 回実行した作業 ここまで>*))
ここまでを itpass, epa, aoe のそれぞれについて計 3 回行った.
=== apache への証明書の設定
/usr/local/apache2/conf/extra/httpd-ssl.conf を編集して発行した証明書を設定する.
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
編集箇所は下の通り.
ServerName itpass.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/usr/local/apache2/conf/ca/itpass/itpass.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/ca/itpass/itpass.key"
ServerName aoe.scitec.kobe-u.ac.jp:442
の項目内で下のように書き換えた.
SSLCertificateFile "/usr/local/apache2/conf/ca/aoe/aoe.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/ca/aoe/aoe.crt"
ServerName epa.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/usr/local/apache2/conf/ca/epa/epa.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/ca/epa/epa.crt"
= 動作チェック
* apache を起動させる
# /usr/local/apache2/bin/apachectl -k start
* 起動したかどうかを以下のコマンドで確認した.
# ps aux | grep http
画面左端に www-data と表示され, 起動できていることを確認した.
* ~itpass/public_html/ に test という名前のディレクトリを作成し, その中に test.txt というファイルを作成した.
* ブラウザで test.txt が正常に表示されるかどうかを確認する.
* URL は http://tako-itpass.scitec.kobe-u.ac.jp/test/test.txt, https://tako-itpass.scitec.kobe-u.ac.jp/test/test.txt
* "http://..." と "https://..." の両方に関して行った.
* apache を停止
# /usr/local/apache2/bin/apachectl -k graceful-stop
* 停止したかどうかを確認した.
* apache のエラーログ /var/log/httpd-error.log を確認し, エラーなどが出ていないことを確認した.
= 起動スクリプトの用意
* サーバの起動時に apache が起動させるための起動スクリプトを用意する.
* Debian 8 から導入された systemd による起動設定を行った.
具体的には, ((<URL:http://www.smiyasaka.com/CentOS7.0_server21.html>))
を参考に, /etc/systemd/system に apache2.service を作成した.
chikuwa2@tako-itpass /etc/systemd/system
% cat apache2.service
[Unit]
Description=httpd-2.4.37 daemon
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
[Install]
WantedBy=multi-user.target
* 起動テストを行い, 起動を確認した.
$ sudo systemctl start apache2
$ ps aux | grep httpd
* システム起動時に apache が立ち上がるようにするために追加設定を行った.
$ sudo systemctl enable apache2
* 再起動して apache が起動するかを確認した.
* 起動していることを確認した.
== Let's encrypt による証明書の設定
サーバ交換作業後に Let's encrypt による証明書の設定をしなおした.
Let's Encrypt 総合ポータル (https://letsencrypt.jp/) の
Let's Encrypt の使い方 (https://letsencrypt.jp/usage/) に従って作業する.
=== 作業用ディレクトリの作成
作業ディレクトリを作成する.
$ sudo -s
# cd /usr/local/src
# mkdir certbot
# cd certbot
すでにサーバ再構築時に完了していた作業については, 行わなかった.
=== certbot のダウンロード
Let's Encrypt では, Debian 用に certbot のパッケージが用意
されている. しかし, このパッケージは apache2 の Debian パッ
ケージに依存しているため, apache をソースから手動で make
している itpass サーバでは使えない.
そのため, https://certbot.eff.org/ から, 下のようにして
certbot をダウンロードしてインストールする.
"Software" に apache を選択.
"System" に "Other UNIX" を選択.
当該ページの説明に従って, 下のように作業する.
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
=== 証明書の発行
ダウンロードした certbot-auto を使って itpass.scitec.kobe-u.ac.jp 用の
証明書を発行する.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/itpass/public_html \
-d itpass.scitec.kobe-u.ac.jp
なお, certbot-auto のオプションの意味は下の通り.
* --webroot
既に動作中のウェブサーバ上で, ウェブサーバを停止せずに証明書を発行する.
* certonly
apache の設定ファイルを自動で書き換えずに証明書を取得するのみ.
証明書は /etc/letsencrypt に置かれる.
* --webroot-path
RootPath の設定
* --email
初回実行時にメールアドレスを尋ねられなくするためのオプション.
つけなくて良かったような気がする.
同様に, epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp 用の証明書を発行する.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/epalab/public_html \
-d epa.scitec.kobe-u.ac.jp
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/aoelab/public_html \
-d aoe.scitec.kobe-u.ac.jp
=== apache への証明書の設定
/usr/local/apache2/conf/extra/httpd-ssl.conf を編集して発行した証明書を設定した.
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
編集箇所は下の通り.
ServerName itpass.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/privkey.pem"
ServerName aoe.scitec.kobe-u.ac.jp:442
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/privkey.pem"
ServerName epa.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/privkey.pem"
=== 証明書更新のテスト
Let's encrypt の証明書の有効期限は 90 日である.
このため, certbot-auto には簡単に証明書を更新する方法が存在する.
その方法を設定する.
まずは下のようにして更新をテストする.
# ./certbot-auto renew --dry-run
これを定期的に実行するために cron のためのスクリプトを設定する.
下の内容の /etc/cron.local/daily/240_letsencrypt_renew を作成した.
#!/bin/sh
#
#= Renew certificate
#
MAINTAINERS="Yoshiyuki O. Takahashi"
UPDATE='2018-04-25'
VERSION='1.0'
REFERENCES='none'
COMMAND='/usr/local/src/certbot/certbot-auto'
DRYRUN='--dry-run'
DRYRUN=''
$COMMAND renew $DRYRUN
実行権限を与えた.
下のように動作テストを行い, 問題なく動作することを確認した.
(ただし, この時点では証明書が新しいため更新されなかった.)
# /etc/cron.local/daily/240_letsencrypt_renew
= 動作チェック
* apache を停止
# /usr/local/apache2/bin/apachectl -k graceful-stop
* 停止したかどうかを確認する.
* apache を起動
* apache は /usr/local/apache2/bin/apachectl で起動/停止する
# /usr/local/apache2/bin/apachectl -k start
* 起動したかどうかを以下のコマンドで確認する確認した.
# ps aux | grep http
画面左端に www-data と表示されている行があることを確認する確認した.
* ブラウザで https://itpass.scitec.kobe-u.ac.jp にアクセスし, ページを正常に見ることができることを確認した.
== openssl の設定を変更
/etc/ssl/openssl.cnf について以下の二点の変更を加えた.
* [usr_cert] セクションにある nsCertType=server のコメントアウトを外した.
* [v3_ca] セクションにある nsCertType=sslCA,emailCA のコメントアウトを外した.
== Let's encrypt による証明書の設定
以前はプライベート証明書を用いていたが,
現在は Let's encript (https://letsencrypt.org/) を利用した
証明書の設定を行った.
Let's Encrypt 総合ポータル (https://letsencrypt.jp/) の
Let's Encrypt の使い方 (https://letsencrypt.jp/usage/) に従って作業した.
=== 作業用ディレクトリの作成
作業ディレクトリを作成する.
$ sudo -s
# cd /usr/local/src
# mkdir certbot
# cd certbot
=== certbot のダウンロード
Let's Encrypt では, Debian 用に certbot のパッケージが用意
されている. しかし, このパッケージは apache2 の Debian パッ
ケージに依存しているため, apache をソースから手動で make
している itpass サーバでは使えない.
そのため, https://certbot.eff.org/ から, 下のようにして
certbot をダウンロードしてインストールする.
"Software" に apache を選択.
"System" に "Other UNIX" を選択.
当該ページの説明に従って, 下のように作業した.
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
=== 証明書の発行
ダウンロードした certbot-auto を使って itpass.scitec.kobe-u.ac.jp 用の
証明書を発行した.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/itpass/public_html \
-d tako-itpass.scitec.kobe-u.ac.jp
同様に, epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp 用の証明書を発行する.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/epalab/public_html \
-d epa.scitec.kobe-u.ac.jp
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/aoelab/public_html \
-d aoe.scitec.kobe-u.ac.jp
どれも /home 以下のディレクトリが存在せず, エラーが出たので /home 以下に/itpass/public_html , /aoelab/public_html , /epalab/public_html を作成した.
もう一度 ./certbot-auto を itpass aoe epa に対して行うと,
下のように聞かれるた.
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel:
A とした.
さらに下のように聞かれた.
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o:
N とした
なお, certbot-auto のオプションの意味は下の通り.
* --webroot
既に動作中のウェブサーバ上で, ウェブサーバを停止せずに証明書を発行する.
* certonly
apache の設定ファイルを自動で書き換えずに証明書を取得するのみ.
証明書は /etc/letsencrypt に置かれる.
* --webroot-path
RootPath の設定
初回実行時にメールアドレスを尋ねられなくするためのオプション.
つけなくて良かったような気がする.
=== apache への証明書の設定
/usr/local/apache2/conf/extra/httpd-ssl.conf を編集して発行した証明書を設定する.
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
編集箇所は下の通り.
ServerName itpass.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/privkey.pem"
ServerName aoe.scitec.kobe-u.ac.jp:442
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/privkey.pem"
ServerName epa.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/privkey.pem"
=== 証明書更新のテスト
Let's encrypt の証明書の有効期限は 90 日である.
このため, certbot-auto には簡単に証明書を更新する方法が存在する.
その方法を設定する.
まずは下のようにして更新をテストした.
# ./certbot-auto renew --dry-run
更新されたかを確認するため /var/log/letsencrypt/letsencrypt.log の中身を確認した.
証明書の更新を定期的に実行するために cron のためのスクリプトを設定する.
下の内容の /etc/cron.local/daily/240_letsencrypt_renew を作成した.
#!/bin/sh
#
#= Renew certificate
#
MAINTAINERS="Yoshiyuki O. Takahashi"
UPDATE='2018-04-25'
VERSION='1.0'
REFERENCES='none'
COMMAND='/usr/local/src/certbot/certbot-auto'
DRYRUN='--dry-run'
DRYRUN=''
$COMMAND renew $DRYRUN
実行権限を与えた.
下のように動作テストを行い, 問題なく動作することを確認した.
(ただし, この時点では証明書が新しいため更新されなかった.)
# /etc/cron.local/daily/240_letsencrypt_renew
=== 参考ページ
* ((<certbot - Apache on Other UNIX|URL:https://certbot.eff.org/lets-encrypt/pip-apache>))
* ((<Let's Encrypt の使い方|URL:https://letsencrypt.jp/usage/>))
* ((<Let's Encrypt ユーザーガイド|URL:https://letsencrypt.jp/docs/using.html#renew-subcommand>))
* ((<Let's EncryptでWebサイトSSL化に挑戦したら簡単過ぎた|URL:https://www.tetsis.com/blog/?m=201710>))
= 動作チェック
* apache を起動
* apache は /usr/local/apache2/bin/apachectl で起動/停止する
# /usr/local/apache2/bin/apachectl -k start
* 起動したかどうかを以下のコマンドで確認した.
# ps aux | grep http
ここで apache が起動できていなかったため, 画面左端に www-data と表示は出なかった.
* apache のエラーログ /var/log/httpd-error.log を確認すると, 末尾に
[Tue Nov 06 17:19:09.874475 2018] [ssl:emerg] [pid 1734:tid
140226041945728] AH02311: Fatal error initialising mod_ssl, exiting.
See /var/log/httpd-ssl-error.log for more information
と記述されていた.
= SSL 用の証明書の作成 (参照 : 2016 年度サーバ構築ログ)
従来の方法で SSL 証明書を作成することにした.
=== プライベート CA の作成
apache の config ディレクトリに入り, 次のように証明書を格納するディレク
トリを作成した.
# cd /usr/local/apache2/conf
# mkdir ca
# cd ./ca/
# mkdir {itpass,epa,aoe のそれぞれの名称で作成}
以下の作業は ServerName : itpass.scitec.kobe-u.ac.jp,
epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp
のそれぞれについて行った. サーバ名を適宜読みかえ, 3 回実行する.
((*< 3 回実行した作業 ここから>*))
秘密鍵を生成した.
# openssl genrsa -out itpass.key 2048
公開鍵を生成した(SHA-2(256)形式).
# openssl req -new -sha256 -key itpass.key -out itpass.csr
Country Name (2 letter code) [AU]: JP
State or Province Name (full name) [Some-State]: Hyogo
Locality Name (eg, city) []: Kobe
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Kobe
University
Organizational Unit Name (eg, section) []: ITPASS (epa, aoe のときはそれぞれ "EPA lab.", "AOE lab." として登録)
Common Name (eg, YOUR name) : itpass.scitec.kobe-u.ac.jp (ここは
itpass の他に, epa, aoe の分をそれぞれ作成する)
Email Address: itpadmin_at_itpass.scitec.kobe-u.ac.jp (ここは同じ)
A challenge password: (空で Enter)
A optional company name: (空で Enter)
自己署名証明書を作成.
# openssl x509 -req -in itpass.csr -signkey itpass.key -out itpass.crt
生成された鍵や証明書をディレクトリに格納した.
((*< 3 回実行した作業 ここまで>*))
ここまでを itpass, epa, aoe のそれぞれについて計 3 回行った.
=== apache への証明書の設定
/usr/local/apache2/conf/extra/httpd-ssl.conf を編集して発行した証明書を設定する.
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
編集箇所は下の通り.
ServerName itpass.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/usr/local/apache2/conf/ca/itpass/itpass.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/ca/itpass/itpass.key"
ServerName aoe.scitec.kobe-u.ac.jp:442
の項目内で下のように書き換えた.
SSLCertificateFile "/usr/local/apache2/conf/ca/aoe/aoe.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/ca/aoe/aoe.crt"
ServerName epa.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/usr/local/apache2/conf/ca/epa/epa.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/ca/epa/epa.crt"
= 動作チェック
* apache を起動させる
# /usr/local/apache2/bin/apachectl -k start
* 起動したかどうかを以下のコマンドで確認した.
# ps aux | grep http
画面左端に www-data と表示され, 起動できていることを確認した.
* ~itpass/public_html/ に test という名前のディレクトリを作成し, その中に test.txt というファイルを作成した.
* ブラウザで test.txt が正常に表示されるかどうかを確認する.
* URL は http://tako-itpass.scitec.kobe-u.ac.jp/test/test.txt, https://tako-itpass.scitec.kobe-u.ac.jp/test/test.txt
* "http://..." と "https://..." の両方に関して行った.
* apache を停止
# /usr/local/apache2/bin/apachectl -k graceful-stop
* 停止したかどうかを確認した.
* apache のエラーログ /var/log/httpd-error.log を確認し, エラーなどが出ていないことを確認した.
= 起動スクリプトの用意
* サーバの起動時に apache が起動させるための起動スクリプトを用意する.
* Debian 8 から導入された systemd による起動設定を行った.
具体的には, ((<URL:http://www.smiyasaka.com/CentOS7.0_server21.html>))
を参考に, /etc/systemd/system に apache2.service を作成した.
chikuwa2@tako-itpass /etc/systemd/system
% cat apache2.service
[Unit]
Description=httpd-2.4.37 daemon
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
[Install]
WantedBy=multi-user.target
* 起動テストを行い, 起動を確認した.
$ sudo systemctl start apache2
$ ps aux | grep httpd
* システム起動時に apache が立ち上がるようにするために追加設定を行った.
$ sudo systemctl enable apache2
* 再起動して apache が起動するかを確認した.
* 起動していることを確認した.
== Let's encrypt による証明書の設定
サーバ交換作業後に Let's encrypt による証明書の設定をしなおした.
Let's Encrypt 総合ポータル (https://letsencrypt.jp/) の
Let's Encrypt の使い方 (https://letsencrypt.jp/usage/) に従って作業する.
=== 作業用ディレクトリの作成
作業ディレクトリを作成する.
$ sudo -s
# cd /usr/local/src
# mkdir certbot
# cd certbot
すでにサーバ再構築時に完了していた作業については, 行わなかった.
=== certbot のダウンロード
Let's Encrypt では, Debian 用に certbot のパッケージが用意
されている. しかし, このパッケージは apache2 の Debian パッ
ケージに依存しているため, apache をソースから手動で make
している itpass サーバでは使えない.
そのため, https://certbot.eff.org/ から, 下のようにして
certbot をダウンロードしてインストールする.
"Software" に apache を選択.
"System" に "Other UNIX" を選択.
当該ページの説明に従って, 下のように作業する.
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
=== 証明書の発行
ダウンロードした certbot-auto を使って itpass.scitec.kobe-u.ac.jp 用の
証明書を発行する.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/itpass/public_html \
-d itpass.scitec.kobe-u.ac.jp
なお, certbot-auto のオプションの意味は下の通り.
* --webroot
既に動作中のウェブサーバ上で, ウェブサーバを停止せずに証明書を発行する.
* certonly
apache の設定ファイルを自動で書き換えずに証明書を取得するのみ.
証明書は /etc/letsencrypt に置かれる.
* --webroot-path
RootPath の設定
初回実行時にメールアドレスを尋ねられなくするためのオプション.
つけなくて良かったような気がする.
同様に, epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp 用の証明書を発行する.
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/epalab/public_html \
-d epa.scitec.kobe-u.ac.jp
# ./certbot-auto --webroot certonly \
--email itpadmin@itpass.scitec.kobe-u.ac.jp \
--webroot-path /home/aoelab/public_html \
-d aoe.scitec.kobe-u.ac.jp
=== apache への証明書の設定
/usr/local/apache2/conf/extra/httpd-ssl.conf を編集して発行した証明書を設定した.
# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
編集箇所は下の通り.
ServerName itpass.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/privkey.pem"
ServerName aoe.scitec.kobe-u.ac.jp:442
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/privkey.pem"
ServerName epa.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換えた.
SSLCertificateFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/privkey.pem"
=== 証明書更新のテスト
Let's encrypt の証明書の有効期限は 90 日である.
このため, certbot-auto には簡単に証明書を更新する方法が存在する.
その方法を設定する.
まずは下のようにして更新をテストする.
# ./certbot-auto renew --dry-run
これを定期的に実行するために cron のためのスクリプトを設定する.
下の内容の /etc/cron.local/daily/240_letsencrypt_renew を作成した.
#!/bin/sh
#
#= Renew certificate
#
MAINTAINERS="Yoshiyuki O. Takahashi"
UPDATE='2018-04-25'
VERSION='1.0'
REFERENCES='none'
COMMAND='/usr/local/src/certbot/certbot-auto'
DRYRUN='--dry-run'
DRYRUN=''
$COMMAND renew $DRYRUN
実行権限を与えた.
下のように動作テストを行い, 問題なく動作することを確認した.
(ただし, この時点では証明書が新しいため更新されなかった.)
# /etc/cron.local/daily/240_letsencrypt_renew
= 動作チェック
* apache を停止
# /usr/local/apache2/bin/apachectl -k graceful-stop
* 停止したかどうかを確認する.
* apache を起動
* apache は /usr/local/apache2/bin/apachectl で起動/停止する
# /usr/local/apache2/bin/apachectl -k start
* 起動したかどうかを以下のコマンドで
# ps aux | grep http
画面左端に www-data と表示されている行があることを
* ブラウザで https://itpass.scitec.kobe-u.ac.jp にアクセスし, ページを正常に見ることができることを確認した.