Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

ssl-cert

SSL証明書の作成方法

SSL自己発行証明書(暫定)の作成

1. opensslを使用してSHA1で署名する場合(期限10年)

openssl genrsa -out test.key 2048
openssl req -new -key test.key -x509 -days 3652 -out test.crt -sha1

内容の確認方法

openssl x509 -text -noout -in test.crt

Let's Encrypt SSL証明書の作成と更新

EPELの certbot を使用する場合

参考

1.certbotを epelからインストール (2021.5.28時点で CentOS7/SL7 および CentOS 8 に certbot がepelにある)

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

2. httpdを停止して、初期の証明書ファイルを作成 (注:あらかじめ、SSL自己発行証明書でセキュリティ監査を受け、http/https は外部にopenしていること) -d の後に、証明したいホストのFQDNを記述する。

# systemctl stop httpd
# certbot certonly --standalone -d ribfnewhost.riken.jp

その後、自分のEmailアドレスを入力(証明書の有効期限の19日前にメール通知がくる)、規約を読み承諾(A)gree する。後半の選択(share your email address with the Electronic Frontier Foundation)は、必要があれば承諾する(無理に承諾する必要はない)その後、以下のようにSSL証明書が作成されるので、これらを /etc/httpd/conf.d/ssl.conf 中で指定。

Starting new HTTPS connection (1): supporters.eff.org
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for ribfnewhost.riken.jp
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/ribfnewhost.riken.jp/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/ribfnewhost.riken.jp/privkey.pem
   Your cert will expire on 2019-02-05. 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

必要な証明書のpath (下記のsymbolic linkの元を指定:証明書を更新するとlink先のファイル名が変わる)

# ls -l  /etc/letsencrypt/live/ribfnewhost.riken.jp/
total 4
-rw-r--r-- 1 root root 682 Nov  7 14:28 README
lrwxrwxrwx 1 root root  39 Nov  7 14:28 cert.pem -> ../../archive/ribfnewhost.riken.jp/cert1.pem
lrwxrwxrwx 1 root root  40 Nov  7 14:28 chain.pem -> ../../archive/ribfnewhost.riken.jp/chain1.pem
lrwxrwxrwx 1 root root  44 Nov  7 14:28 fullchain.pem -> ../../archive/ribfnewhost.riken.jp/fullchain1.pem
lrwxrwxrwx 1 root root  42 Nov  7 14:28 privkey.pem -> ../../archive/rribfnewhost.riken.jp/privkey1.pem
# 

3. conf.d/ssl.conf 中 以下の設定等

SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
# https://www.ssllabs.com/ssltest/analyze.html 
SSLCipherSuite   ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:!DSS:!3DES
SSLHonorCipherOrder on
SSLCertificateFile      /etc/letsencrypt/live/ribfnewhost.riken.jp/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/ribfnewhost.riken.jp/chain.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/ribfnewhost.riken.jp/privkey.pem

4.Apache httpd の追加 security設定、 httpd/http.conf中(DocumentRootの直前あたりで)

# Security
ServerTokens Prod
ServerSignature Off
TraceEnable Off
# httproxy
RequestHeader unset Proxy
Header unset X-Powered-By
# Click Jack
Header append X-FRAME-OPTIONS "SAMEORIGIN"
# XSS
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff

5.証明書の有効期限は3ヶ月なので、cronで自動更新の設定(週に〜1度程度実行)

更新を standalone で行いたい時は

certbot renew --pre-hook "systemctl stop httpd" --post-hook "systemctl start httpd"

を実行。(--pre-hook --post-hook は実際に更新が行われる時のみに実行される)

NB1:certbot renew実行時は http/https は外部に対して openしている必要がある. 上記は apache httpd で Document Root を標準の /var/www/html/ として使用している場合。

NB2: apache httpdが動いている時のcertbotでの更新はエラーでうまく実行できない時があるので注意。 更新は standalone で行うのが安全 (2019.3.25追記)

crontabの実際の設定例(SL7.6)

50 2  *  * 1  certbot renew --webroot-path /var/www/html/ --pre-hook "systemctl stop httpd" --post-hook "systemctl start httpd"

(2019.8.19動作再検証OK, @ribfml)

certbot-auto を使用する場合

ホスト名がribfsv.riken.jpの場合。

  1. port 80と443はファイアーウォールで開けておく。
  2. (RHEL8/Centos8)の場合のみ python3-virtualenv を 事前にdnfでインストールします

# dnf install python3-virtualenv
  1. 以下を実施して certbot-auto を取得し実行可能にする/

# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
  1. httpd 一旦止める (service httpd stop)

# sudo ./certbot-auto certonly -a standalone -d ribfsv.riken.jp
  1. これでドメイン証明書が取得できる。成功すると/etc/letsencrypt/live/ribfsv.riken.jp以下にファイルが出来る。(virtualホストしている場合は、その数だけドメイン証明書を取得しておく)
  2. ssl.conf あるいはSSLのvirtual hostの定義中で

SSLCertificateFile /etc/letsencrypt/live/ribfsv.riken.jp/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/ribfsv.riken.jp/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ribfsv.riken.jp/privkey.pem

の設定を追加。

  1. httpd再開。(service httpd start)
  2. cronで毎月1,11,21日に証明書を更新チェックする設定(証明書期限の30日前にならないと実際には更新されない)

Virtual hostで多数のドメインを設定している場合でも、以下のコマン一つで更新が必要なVirtual hostに対しての更新が実施される。

RHEL7,8 (CentOS7,8 SL7.8)の場合のcrontabの例 (2020.06 確認済)

12 1 1,11,21 * * /root/letsencrypt/certbot-auto renew --webroot -w /dir/path/..   --post-hook "systemctl reload httpd"

/dir/path/.. は DocumentRoot の directory path

RHEL6 (CentOS6 SL6)の場合のcrontabの例   (2020.06 確認済)

12 1 1,11,21 * * /root/letsencrypt/certbot-auto renew --webroot -w /dir/path/..  --post-hook "/etc/init.d/httpd reload"

※certbot-auto renew が更新のコマンド。