SSL/TLS証明書を生成するプロセスは、多くのLinuxシステム管理者にとって共通のタスクです。幸い、管理者でなくても、多くのLinuxディストリビューションにデフォルトでインストールされているオープンソースのツールであるOpenSSLを使えば、簡単に行うことができます。ここでは、OpenSSLとは何か、どのようにインストールするか、そして最も重要な、システム上でSSLとTLSの証明書を生成するためにそれを使用する方法について説明します。

OpenSSLとは何か?

OpenSSL は OpenSSL Project によって開発されたライブラリで、ネットワークトラフィックを暗号化するための SSL と TLS の実装をオープンソースで提供しています。OpenSSL は様々な Unix ベースのディストリビューションで容易に利用でき、証明書や RSA 秘密鍵を生成したり、一般的な暗号関連のタスクを実行するために使用することができます。

自己署名SSL証明書の制限事項

OpenSSLを使ってSSL証明書を生成する場合、それは “自己署名 “とみなされます。これは、SSL証明書が認証局(CA)からではなく、自分自身の秘密鍵で署名されていることを意味します。

そのため、このSSL証明書は「信頼」できないので、一般公開されるサイトには使用しないでください。もし使用した場合、ユーザーはブラウザから証明書に関する警告を受ける可能性があります。

自己署名証明書は、ローカル開発またはバックグラウンドで実行されるアプリケーションで、インターネットに面していない場合に便利です。

また、LetsEncrypt を使用するか、Comodo CA などの信頼できる機関によって検証された証明書を取得することもできます。

インストール

ほとんどのLinuxディストリビューションは、すでにデフォルトでOpenSSLのバージョンを組み込んでいます。そうでない場合は、簡単にインストールすることができます。

UbuntuやDebianでは、aptコマンドでインストールすることができます。

sudo apt install openssl

CentOS (またはその代替) では、yum コマンドを使用してインストールすることができます。

sudo yum install openssl

また、ウェブサイトから “.tar.gz” ファイルとして簡単にダウンロードすることができます。

基本的な使用法

OpenSSL がインストールできたので、このプログラムが提供する基本的な機能のいくつかを見てみましょう。

まず、OpenSSL のバージョンやその他の関連情報を見ることから始めましょう。

openssl version -a

提供されているマニュアルを確認することができます。

openssl ヘルプ

設定ファイルを使って証明書を生成する

OpenSSLを使用して証明書を生成する方法はたくさんあります。そのうちの1つは、組織に関する詳細を指定する設定ファイルを使用する方法です。

まず、「config.conf」という設定ファイルを作成し、Nanoで編集します。

sudo nano example.conf

以下は、設定ファイルの内容の例です。

[req]
default_bits = 2048
プロンプト = no
default_md = sha256
req_extensions = req_ext
x509_extensions=v3_ca。
識別名 = dn
 
[dn]
C = US
ST = カリフォルニア
L = ロサンジェルス
O = 組織
OU = 営業
電子メールアドレス = test@test.com
CN = www.org.test.com
 
[ v3_ca ]です。
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:常に,issuer:常に
basicConstraints = CA:true
 
[req_ext]の場合
subjectAltName = @alt_names
 
[alt_names]
DNS.1 = test.example.com

これをコピーしてファイルに貼り付けて、組織の情報を反映させるために必要な変更を行えばよい。

次に、RSA秘密鍵を生成して、それを使ってルート証明書を生成する必要があります -。

openssl genrsa -out example.key 2048

この場合、outフラグは生成される鍵の名前を指定するために使用します。また、鍵のサイズは、RSA鍵のデフォルトである2048ビットを指定します。

また、CSR(Certificate Signing Request)を生成する必要があります。

openssl req -new -key example.key -out example.csr -config example.conf

この場合、-key フラグで RSA 鍵を指定し、-out フラグで CSR ファイル名を指定し、-config フラグで設定ファイル名を指定します。

この後、ルート証明書を生成して、最終的な証明書の生成に使用します。

openssl req -x509 -sha256 -nodes -new -key example.key -out example.crt -config example.conf

このルート証明書を生成する過程で、-sha256フラグを使用して、メッセージダイジェストにSHA256を指定しています。

さて、最後のステップですが、最後に以下のように入力すると、証明書が生成されます。

openssl x509 -sha256 -CAcreateserial -req -days 30 -in example.csr -extfile example.conf -CA example.crt -CAkey example.key -out final.crt

CA フラグはルート証明書を、-CAkey フラグは秘密鍵を、-extfile` は設定ファイルの名前を指定する。final.crt “ファイルは、あなたが望むSSL証明書になります。

設定ファイルなしで証明書を生成する

また、設定ファイルなしでOpenSSLを使用して証明書を生成することもできます。

まず、RSA秘密鍵を生成します。

openssl genrsa -out example.key 2048

次に、CSR を生成する必要があります。

openssl req -new -key example.key -out example.csr

CSRを生成する際に、あなたの組織に関する質問に答えるよう促されます。

最後に、証明書そのものを生成します。

openssl x509 -req -days 30 -in example.csr -signkey example.key -out example.crt

鍵と証明書の検証

鍵や証明書はOpenSSLを使って、checkフラグで簡単に確認・検証することができます。

openssl rsa -check -in example.key

証明書署名要求の確認ができます。

openssl req -text -noout -in example.csr

と証明書も確認できます。

openssl x509 -text -noout -in example.crt

よくある質問

1. Heartbleedについてまだ心配する必要がありますか?

Heartbleed (CVE-2014-0160) は、2014年にOpenSSLで見つかった古い脆弱性です。OpenSSLを実行しているTLSサーバーとクライアントの両方が影響を受けました。発見から数日後にはすぐにパッチがリリースされ、最新のOpenSSLを使用している限り、この脆弱性は2022年には心配するようなものではありません。

DebianやUbuntuベースのシステムでOpenSSLを使用している場合、以下のコマンドを実行することでいつでもアップデートすることができます。

sudo apt update && sudo apt upgrade openssl

2. SSL証明書の有効期限はどれくらいですか?

これは証明書を生成する際に選択した値に依存します。これは、証明書を生成する際に -days フラグを使用して指定することができます。

Image credit: Sls written on wooden cube block by 123RF

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。