0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LinodeでLet'sEncryptの証明書を発行してみた

Last updated at Posted at 2022-10-04

Linodeでcertbotを使ってLet'sEncrypt証明書を発行する

殆どのWebサーバーはまだRSA証明書を使っていますが、今回はより安全だとされているECDSA証明書で発行してみます。

LinodeでUbuntu 20.04のVMを利用

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"

certbotの利用

Let'sEncryptの証明書を取得するために、certbotを利用します。
ubuntuのパッケージから Apache用のcertbotをインストールしてみます。

apt install certbot python3-certbot-apache

今回はecdsa証明書を用意したいので、 "--key-type ecdsa" のオプションを使いましたが、
実行したら、errorが返ってきました。  

# certbot certonly  --key-type ecdsa -d YOUR_DOMAIN_NAME --dry-run
usage:
  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate.
certbot: error: unrecognized arguments: --key-type ecdsa

エラーの原因はcertbotのバージョンが古いからでした。パッケージからインストールしたcertbotのバージョンは 0.40.0です。

# certbot --version
certbot 0.40.0

--key-type オプションは certbot 1.10.0 以上で使えるようです。以下を参照し、手動でcertbot 1.30.0 をインストールしなおしました。
https://certbot.eff.org/
(パッケージからインストールしたcertbotを削除し、snapを使って再インストールする) 

# certbot --version
certbot 1.30.0

これで準備が整ったので、 key-typeオプションで無事にLet's EncryptのECDSA証明書が発行されました。

certbot --key-type ecdsa -d YOUR_DOMAIN_NAME

WebサイトでECDSA証明書を確認

発行されたECDSA証明書を使ってWebサイトをHTTPSで公開したあと、opensslでインターネットを経由してECDSA証明証を確認してみました。

ECDSAは"公開鍵の暗号化と署名アルゴリズム"なので、
"Public Key Algorithm: id-ecPublicKey" になっていればECDSA証明書であることがわかります。

openssl s_client  -connect YOUR_DIMAIN_NAME:443 -servername YOUR_DOMAIN_NAME | openssl x509 -text

  Issuer: C=US, O=Let's Encrypt, CN=R3
        Validity
            Not Before: Sep  9 02:31:21 2022 GMT
            Not After : Dec  8 02:31:20 2022 GMT
        Subject: CN=im.linode.akamai.tech
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:ae:d8:44:19:a2:68:33:a8:d7:83:94:6c:15:50:
                    37:74:8c:04:46:b3:3d:f1:48:83:5b:33:a0:1c:dd:
                    76:8a:d4:fc:00:cb:1c:98:27:62:0e:5a:17:1a:6b:
                    d9:e8:d3:ec:26:1e:55:16:f2:3d:31:5c:f1:52:55:
                    af:32:fe:12:ae
                ASN1 OID: prime256v1
                NIST CURVE: P-256

最後にECDSA用の暗号スイートを使って暗号化と復号化ができているかを確認してみました。
-sigalgs オプションを使ってアルゴリズム(ECDSA+SHA256)を指定します。

openssl s_client  -connect YOUR_DIMAIN_NAME:443 -servername YOUR_DIMAIN_NAME -sigalgs ECDSA+SHA256 < /dev/null

※-sigalgs オプションはLinuxの最新バージョンのopensslでは利用できますが、macOS(monterey)のopnsslでは利用できませんでした。

Linuxのopenssl:

$ openssl version
OpenSSL 1.1.1f  31 Mar 2020

MacOSのopenssl:

$ openssl version
LibreSSL 2.8.3

MacOSではLibreSSLになっていました。
Homebrewでopensslを確認

$ brew info  openssl
==> openssl@3: stable 3.0.5 (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl@3/3.0.5 (6,444 files, 28.2MB)
  Poured from bottle on 2022-09-15 at 22:15:02
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openssl@3.rb
License: Apache-2.0
==> Dependencies
Required: ca-certificates
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl@3/certs

and run
  /usr/local/opt/openssl@3/bin/c_rehash

openssl@3 is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.

If you need to have openssl@3 first in your PATH, run:
  echo 'export PATH="/usr/local/opt/openssl@3/bin:$PATH"' >> /Users/bahn/.bash_profile

Homebrewではopenssl@3をアップデートしているものの、使っているopensslは別のパスのLibreSSLのopensslだったことがわかりました。

$ which openssl
/usr/bin/openssl

/usr/local/opt/openssl@3/bin/openssl を使ったら -sigalgs オプションが使えるようになったので、$PATHを変えることにします。
(ちなみに /usr/local/opt/openssl@1.1/bin/openssl も-sigalgs が使えます)

opensslのホームページ(https://www.openssl.org/)を確認すると、openssl3.0.5 とopenssl1.1.1qが最新でした。
image.png

なお、LibreSSL(https://www.libressl.org/)の最新バージョンはLibreSSL 3.5.3 (May 18th, 2022)のようでしたが、LibreSSLをやめて本家のopensslにすることにしたので、まだ試していません。

まとめ

Let's Encrypt証明書が簡単に発行できて驚きました。MacOSのopensslをLibreSSLから本家のopensslに変更しLinuxと同様の検証ができました。

Linodeとは

Linode (https://www.linode.com/) は Akamaiが提供するIaaS (Infrastructure as a Service) プラットフォームプロバイダーのサービスです。リノードと発音します。
Akamaiは2022年2月にLinode社の買収を発表しました。
https://www.akamai.com/ja/newsroom/press-release/akamai-to-acquire-linode
クラウドコンピューティングをよりシンプルに、手頃な価格で、誰もが利用できるようにすることで、イノベーションを加速することができます。
https://www.linode.com/ja/alternative-cloud-provider/

関連記事

アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?