こんにちは。hacknoteのr.katoです。
今回はdehydratedを使って、暗号形式がECDSAの鍵を設定した手順を紹介していきます。
環境
- Amazon Linux2(ドメイン取得、設定済み)
- Apache2.4.39
- openssl 1.0.2k-fips
手順
- dehydratedの入手
次のコマンドを実行してください。
dehydratedを使って鍵の作成や認証局への申請を行います。
$ cd /opt $ git clone https://github.com/lukas2511/dehydrated.git $ mkdir -p /var/www/dehydrated/
- Apacheの設定
次の様にapp.confを作成してください。
# /etc/httpd/conf.d/app.conf Alias /.well-known/acme-challenge /var/www/dehydrated <Directory /var/www/dehydrated> Options None AllowOverride None # Apache 2.4 <IfModule mod_authz_core.c> Require all granted </IfModule> </Directory>
そして、Webサーバーの再起動をしてください。
- dehydratedの設定
認証局の規約に同意してからdehydratedの設定をしていきます。
次のコマンドでconfigファイルの例をopt/dehydrated/
にコピーし、その後規約に同意します。
$ cp /opt/dehydrated/docs/examples/config /opt/dehydrated/ $ ./dehydrated --register --accept-terms
そして、/opt/dehydrated/config
を編集します。
# /opt/dehydrated/config (略) # Resolve names to addresses of IP version only. (curl) # supported values: 4, 6 # default: <unset> IP_VERSION="4" # Path to certificate authority (default: https://acme-v02.api.letsencrypt.org/directory) CA="https://acme-v02.api.letsencrypt.org/directory" (略) # File containing the list of domains to request certificates for (default: $BASEDIR/domains.txt) DOMAINS_TXT="${BASEDIR}/domains.txt" # Output directory for challenge-tokens to be served by webserver or deployed in HOOK (default: /var/www/dehydrated) WELLKNOWN="/var/www/dehydrated" # Default keysize for private keys (default: 4096) KEYSIZE="521" #今回は521にしたが必要に応じて変更 (略) # Which public key algorithm should be used? Supported: rsa, prime256v1 and secp384r1 KEY_ALGO=prime256v1 (略)
その後、ドメインを指定するため、/opt/dehydrated/domains.txt
を作成し、
設定したいドメインをdomains.txtに入力し保存します。
ここでは、仮にexample.com
を設定したいドメインとします。
- テスト
ここまで設定したら、一度テストします。
認証局に申請しすぎると、Banされるのでテストを行います。
次のコマンドでテストができます。
$ ./dehydrated -c -d example.com
うまくいけば次の様に出力されます。
# INFO: Using main config file /opt/dehydrated/config Processing example.com + Signing domains... + Generating private key... + Generating signing request... + Requesting new certificate order from CA... + Received 1 authorizations URLs from the CA + Handling authorization for example.com + 1 pending challenge(s) + Deploying challenge tokens... + Responding to challenge for example.com authorization... + Challenge is valid! + Cleaning challenge tokens... + Requesting certificate... + Checking certificate... + Done! + Creating fullchain.pem... + Done!
- テストができたら、発行します。次のコマンドを実行してください。
$ ./dehydrated -c -x -d example.com
正常終了すると次のファイルが生成されるので、Apacheに設定します。
- サーバー証明書: /opt/dehydrated/certs/example.com/cert.pem
- CA証明書: /opt/dehydrated/certs/example.com/chain.pem
- 秘密鍵: /opt/dehydrated/certs/example.com/privkey.pem
- CA証明書 + サーバー証明書:/opt/dehydrated/certs/example.com/fullchain.pem
- 鍵の設定
/etc/httpd/conf.d/ssl.confの作成をし、次の様にします。
LoadModule ssl_module modules/mod_ssl.so Listen 443 SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin SSLOpenSSLConfCmd ECDHParameters prime256v1 SSLOpenSSLConfCmd Curves prime256v1 <VirtualHost *:443> LogLevel warn SSLCertificateFile /opt/dehydrated/certs/example.com/cert.pem SSLCertificateKeyFile /opt/dehydrated/certs/example.com/privkey.pem SSLCertificateChainFile /opt/dehydrated/certs/example.com/chain.pem DocumentRoot "/var/www/html/" ServerName example.com:443 </VirtualHost>
以上でこの様にECDSA化することができます。