はじめに
サーバ証明書の更新作業は、Webサーバやロードバランサーなど担当するシステムの構成によって方法が異なるため、手順化されていないことが多いと思います。
従って運用担当者は、自分が管理するシステムにおける証明書の環境を理解し、証明書の期限が切れる前に適切に証明書の更新作業を行うことが求められます。
本記事では、サーバ証明書の更新作業で押さえておくべき知識について記載しています。
環境
新規にサーバ証明書を発行したり更新などの作業を行う場合は、事前にCSRの作成が必要になるため、OpenSSLなどの暗号化ソフトウェアが必要です。
例えば、Macで作業する場合、標準でインストールされているのはLibreSSLです。そのため、MacでOpenSSLを使用する場合は、OpenSSLのインストールが必要です。
MacでOpenSSLを使用する方法
ターミナルを起動して以下のコマンドを実行すると、LibreSSLであることが確認できます。
$ openssl version
LibreSSL 3.3.6
LibreSSLは、2014年4月に明らかとなったOpenSSLのHeartbleed脆弱性を受けて、OpenSSLをフォークしたソフトウェアです。
開発元はOpenBSD Projectになり、OpenSSLの開発元であるOpenSSL Projectと異なるため、開発方針が異なります。
従って最新の暗号アルゴリズムやOpenSSL依存の多い製品との互換性を重視する場合は、OpenSSLを使用するのが良いと思います。
MacにOpenSSLを導入したい場合は、ソースをコンパイルしてインストールするか、Homebrewのopenssl@3を利用することで簡単にインストールできます。
$ brew install openssl@3
Homebrewを用いてインストールした場合、フルパスでコマンドを実行することでOpenSSLが使用できます。
$ /opt/homebrew/bin/openssl version
OpenSSL 3.5.1 1 Jul 2025 (Library: OpenSSL 3.5.1 1 Jul 2025)
brewでインストールしたopensslをフルパス指定せずに実行したい場合は、/opt/homebrew/binのパスを/usr/bin/より先に設定する必要があります。
cfssl
CSRの作成はOpenSSL以外にも手段が存在しますが、本記事ではCFSSLについて紹介します。
CFSSLは、CloudFlareが開発しているオープンソースのPKI/TLS対応万能ツールです。
コマンドラインツールとHTTP APIサーバーの両方の機能を備え、TLS証明書の署名、検証、バンドルが可能です。ビルドにはGo 1.20以上が必要です。
cfsslでCSRファイルを作成する場合は、証明書リクエストに関する情報をJSONファイルに指定します。
{
"hosts": [
"example.com",
"www.example.com",
"https://www.example.com",
"jdoe@example.com",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "San Francisco",
"O": "Internet Widgets, Inc.",
"OU": "WWW",
"ST": "California"
}
]
}
CFSSLは、CSRの情報を構造的にテンプレートとして管理し、自動化や大規模の環境への運用するケースに向いています。
openssl
OpenSSLは、単なるコマンドではなく、暗号処理全般を提供するソフトウェアのツールキットです。
opensslとは、OpenSSLに含まれるコマンドラインツールを指し、証明書の作成や暗号化、ハッシュ計算、TLS通信の検証など、さまざまな暗号化関連のタスクを実行できます。
秘密鍵の作成
Linuxの古い書籍などでは、openssl genrsaやopenssl gendsaのサブコマンドを用いて秘密鍵を生成する例が多いですが、昨今では汎用的なopenssl genpkeyを使用することが多いと思います。
$ openssl genpkey -algorithm rsa -out private.key
なお、Red Hat 系ではopenssl genkeyのサブコマンドが使用されています。
openssl genpkeyのサブコマンドは、RSAをはじめ、EC(楕円曲線暗号)やEd25519など、さまざまな暗号アルゴリズムに対応しており、より柔軟な鍵生成が可能です。
CSRの作成
サーバ証明書の更新を行うにあたりopensslコマンドを使用して、対話的に入力しながらCSRを作成するケースは少なくありません。
DV認証では、Common Name(CN)やSubject Alternative Name(SAN) が使用されます。CN以外の属性として組織名や所在地などを入力しても問題ありませんが、認証局によっては無視されるか、自動的に補完・書き換えられることがあります。
ワイルドカード証明書の取得や複数のSANを含めたい場合は、OpenSSLの設定ファイルを用いてCSRを作成するのが一般的です。これにより、対話形式では指定できない拡張項目を含めたCSRを柔軟に作成できます。
サーバ証明書と中間証明書
OpenSSLコマンドや各種セキュリティ製品でサーバ証明書を扱う際に、サーバ証明書と中間証明書を個別に指定する形式と、1つのファイルに連結して使用する形式が存在します。
多くのWebサーバや製品では、サーバ証明書と中間証明書を1つのファイルに連結してインポートする形式がサポートされていることが一般的です。
-----BEGIN CERTIFICATE-----
<certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Intermediate Certificates>
-----END CERTIFICATE-----
一部のシステムやサービスによっては、証明書を別々のファイルで指定する必要がある場合もあるため、製品の仕様に従うことが重要です。
サーバ証明書と秘密鍵
ApacheやNginxなどのWebサーバでは、サーバ証明書と秘密鍵を別々のファイルとして指定するのが一般的です。
一方、セキュリティ製品やクラウドサービスによっては、証明書と秘密鍵をPKCS#12形式として1つにまとめてインポートする場合があります。また、クラウド環境のロードバランサによっては、パスワード付きの秘密鍵を受け付けない場合もあるため、必要に応じてパスワードを解除する必要があります。
秘密鍵のパスワードは後から設定及び解除が可能ですが、いずれの場合も秘密鍵の管理には細心の注意が必要です。アクセス権限の制限や安全な保管場所の確保など、厳重なセキュリティ対策を講じましょう。
PKCS12
PKCS12は、秘密鍵と公開鍵証明書を一つにまとめて安全に保存するための形式です。
この形式は、証明書チェーン(中間CA証明書など)も含めて格納できるため、証明書管理やセキュリティ製品へのインポートに適しています。
多くのセキュリティアプライアンスやクラウド製品は、証明書をPKCS#12形式でインポートする仕様になっているため、サーバ証明書をこの形式に変換する方法を知っておくと便利です。
以下は、pkcs12形式にエクスポートする例です。コマンドを実行すると、パスワードを求められるため、パスワードを設定します。
$ openssl pkcs12 -export -in server.crt -inkey private.key -out server.p12
Enter Export Password:
Verifying - Enter Export Password:
opensslコマンド
運用作業で使用することが多いopensslコマンドの例を以下に記載します。
-
秘密鍵の作成
$ genpkey -algorithm rsa -out private.key -
CSR作成
$ openssl req -new -days 365 -key private.key -out server.csr -
秘密鍵を表示
$ openssl rsa -text -noout -in private.key -
CSRを表示
$ openssl req -text -noout -in server.csr -
サーバ証明書を表示
$ openssl x509 -text -noout -in server.crt -
サーバ証明書のシリアルを表示
$ openssl x509 -in server.crt -noout -serial -
pkcs12形式のエクスポート
$ openssl pkcs12 -export -in server.crt -inkey private.key -out server.p12 -
pkcs12形式の表示
$ openssl pkcs12 -in server.p12 -info -nodes
Windows
Windows環境におけるサーバ証明書の管理に関して、運用の例を一部紹介します。
MMC
Windows環境では、MMCスナップインを使用して証明書を管理することもあります。
サーバ運用では、ローカル コンピューターで管理します。
LDAPS
ADサーバを構築し、LDAPSを使用している場合は、証明書をローカル コンピューターの個人用証明書ストアに保存します。
証明書の更新を行う際に証明書が複数ある場合は、証明書を追加した際に期限が一番新しい証明書を使用します。また、サービスの再起動なく適用できます。
注意点として、MMCスナップインを使用して証明書をインポートする際に、証明書に設定したパスワードが間違っていても、インポートはできてしまいます。そのため、不備に気がつかない場合、LDAPSのコネクションでエラーが発生します。
証明書のパスワードが適切に設定できたかについて確認したい場合は、秘密鍵の管理を開きエラーがなければ、証明書は適切にインポートできていると判定できます。
証明書更新後、ldp.exeを実行してLDAPSのエラーが出力されていないことを確認します。
おわりに
システムの引き継ぎや運用の中でサーバ証明書の更新が必要になった際は、慌てずに仕組みを理解したうえで、確実に対応することが大切です。