SSL/TLS (https)

(2008.12.5 - 2021.9.20)

apacheでSSL(Secure Socket Layer)/TLS,暗号化通信をおこなう.

(環境) CentOS 8 Stream CentOS 7以前はこちら

(以下プロンプトが#ならroot,$なら普通のユーザー)

インストール

mod_sslインストール

# yum install mod_ssl

自己証明書の作成

不正な証明書となってしまうので,現在では使われません。Let's Encryptや有料のSSL証明書を購入すること。

秘密鍵作成(pass phraseはすぐに削除するので何でもよい)

# cd /etc/pki/tls/certs/

# make server.key


...


Enter pass phrase:

Verifying - Enter pass phrase:


# openssl rsa -in server.key -out server.key

Enter pass phrase for server.key:

writing RSA key

証明書作成(ホスト名は正確に入れること)

# make server.crt


...


Country Name (2 letter code) [GB]:JP

State or Province Name (full name) [Berkshire]:Kanagawa

Locality Name (eg, city) [Newbury]:Sagamihara

Organization Name (eg, company) [My Company Ltd]:Kitasato University

Organizational Unit Name (eg, section) []:College of Liberal Arts and Sciences

Common Name (eg, your name or your server's hostname) []:ホスト名(xx.kitasato-u.ac.jpまたは10.1.0.0など)

Email Address []:管理者のメールアドレス

Let's Encrypt証明書の作成

Let's Encryptとは,Mozilla、電子フロンティア財団,ミシガン大学の有志によって設立されたSSLサーバー証明書の認証局。無料でDV認証の証明書を発行してくれる。DV認証とはドメイン名を証明する認証で,Rapid-SSLなどの比較的安い有料のサーバー証明書はこのタイプ。手順は以下の通り(参考):

  1. epel リポジトリをインストールしてから,certbot と python-certbot-apache をインストールする。

# yum install certbot
# yum install python-certbot-apache

  1. 80番ポートを開いてhttp://でアクセスできるようにしてから,次のcertbot コマンドを実行する。 -d オプションには証明書を発行するサーバーのドメイン,-w にはhttpd.confファイルに記述されたDocumentRootのパスを指定する。

# certbot certonly --webroot -w /var/www/html/ -d www.kita.ac.jp
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):
xxx@kita.ac.jp emailアドレスを入れる。

Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
Y Yと打つ。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, 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 our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
Y Yと打つ。

Requesting a certificate for www.kita.ac.jp
Performing the following challenges:
http-01 challenge for www.kita.ac.jp
Using the webroot path /var/www/html for all unmatched domains.

Waiting for verification...

Cleaning up challenges

Subscribe to the EFF mailing list (email: xxx@kita.ac.jp).

Starting new HTTPS connection (1): supporters.eff.org


IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at:

/etc/letsencrypt/live/www.kita.ac.jp/fullchain.pem

Your key file has been saved at:

/etc/letsencrypt/live/www.kita.ac.jp/privkey.pem

Your certificate will expire on 2021-12-17. To obtain a new or

tweaked version of this certificate in the future, simply run

certbot again. To non-interactively renew *all* of your

certificates, run "certbot 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

発行された証明書

# ls -l /etc/letsencrypt/live/www.kita.ac.jp

合計 4

-rw-r--r-- 1 root root 692 9月 18 17:55 README

lrwxrwxrwx 1 root root 51 9月 18 17:55 cert.pem -> ..

lrwxrwxrwx 1 root root 52 9月 18 17:55 chain.pem -> ..

lrwxrwxrwx 1 root root 56 9月 18 17:55 fullchain.pem -> ..

lrwxrwxrwx 1 root root 54 9月 18 17:55 privkey.pem -> ..

証明書の有効期限は90日なので,その少し前に,証明書の更新を行って,apacheを再起動する:

# certbot renew

# systemctl restart httpd

これは,cronで自動実行すると楽。なお,cronを書く前に,(実際には更新しないが,更新できるか確認する)シミュレーションを行っておくとよい:

certbot renew --dry-run

秘密鍵と証明書の設定

# cd /etc/httpd/conf.d/

# cp ssl.conf ssl.conf.org


# vi ssl.conf


SSLCertificateFile /etc/pki/tls/certs/server.crt

SSLCertificateKeyFile /etc/pki/tls/certs/server.key

SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt ←(SSL証明書を購入して)中間証明書がある場合


# General setup for the virtual host, inherited from global configuration

#DocumentRoot "/var/www/html"

DocumentRoot "/var/www/html"

ポート443番(https)をOPEN

# firewall-cmd --permanent --add-service=https
# firewall-cmd --reload
# firewall-cmd --list-services

httpdを再起動

systemctl restart httpd

設定

ディレクトリにパスワードをかけ,https:でのアクセスしかできないようにするには

そのディレクトリの.htaccessファイルにSSLRequireSSLという行を追加する.

httpからhttpsへリダイレクトさせるには,/etc/httpd/conf.dディレクトリにrewrite.confファイルを設置する。

# vi /etc/httpd/conf.d/rewrite.conf

<ifModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

</ifModule>

(注)以下の方法では,.htaccessファイルでディレクトリ表示をONにするOptions Indexes効かなくなる。解決方法は不明。

リダイレクトさせたいディレクトリに.htaccessファイルを設置し,以下の行を追加。そのディレクトリ以下のディレクトリが全てリダイレクトの対象になる。

RewriteEngine on

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://kilin.clas.kitasato-u.ac.jp/$1 [R=301,L]

2014年秋のSSL 3.0 の脆弱性 (POODLE) 対策(CVE-2014-3566)

/etc/httpd/conf.d/ssl.conf の SSLProtocol All で始まる行を検索し,

SSLProtocol All -SSLv2 -SSLv3

と書き換える。

参考

  1. CentOSで自宅サーバー構築 (http://centossrv.com/) 2008.5現在

  2. SSL 3.0 の脆弱性 (POODLE) 対策で Web サーバの SSL 3.0 を無効にした件とブラウザ側の対処まとめ(http://hyper-text.org/archives/2014/10/ssl_3_0_disable.shtml)2014.11現在