Locked History Actions

Diff for "ssl-cert"

Differences between revisions 1 and 58 (spanning 57 versions)
Revision 1 as of 2018-11-12 06:16:03
Size: 979
Comment:
Revision 58 as of 2021-05-28 07:13:01
Size: 8520
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from ssl-selfcert
Line 14: Line 15:
= SSL自己発行証明書(暫定)の作成方法 = = SSL証明書の作成方法 =

=
= SSL自己発行証明書(暫定)の作成 ==
Line 26: Line 29:

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



== EPELの certbot を使用する場合  ==

参考
 *[[https://free-ssl.jp/|Let's Encrypt 総合ポータル(公式ではない)]]
 *[[https://www.server-memo.net/tips/lets-encrypt.html|【CentOS7】Lets EncryptでSSL証明書を取得 ]]




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
}}}
 3. 以下を実施して certbot-auto を取得し実行可能にする/
{{{
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
}}}
 4. httpd 一旦止める (service httpd stop)
{{{
# sudo ./certbot-auto certonly -a standalone -d ribfsv.riken.jp
}}}
 5. これでドメイン証明書が取得できる。成功すると/etc/letsencrypt/live/ribfsv.riken.jp以下にファイルが出来る。(virtualホストしている場合は、その数だけドメイン証明書を取得しておく)
 6. 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
}}}
の設定を追加。
 7. httpd再開。(service httpd start)
 8. 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 が更新のコマンド。

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 が更新のコマンド。