SSL証明書したい(openssl

$ openssl version
OpenSSL 3.6.0 1 Oct 2025 (Library: OpenSSL 3.6.0 1 Oct 2025)

// 秘密鍵の作成
$ openssl genpkey -out private.key

// CSRの作成
$ openssl req -new -key private.key -out server.csr

// 証明書の作成
$ openssl x509 -in server.csr -signkey private.key -out server.crt

opensslは、暗号化や秘密鍵の作成、SSL/TLS証明書の操作など、OpenSSLを使ったさまざまな操作ができるコマンドです。

さまざまなサブコマンドがありますが、ここではSSL証明書の作成に必要なコマンドについて重点的に紹介します。

秘密鍵を生成したい(openssl genpkey

// ed25519鍵
$ openssl genpkey -algorithm ed25519 -out private_ed25519.key

// RSA鍵
$ openssl genpkey -algorithm rsa -out private.key -pkeyopt rsa_keygen_bits:2048

// ECDSA鍵
$ openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out private_ec.key

// 古いコマンド
$ openssl genrsa -out private.key 2048

openssl genpkeyで秘密鍵を生成できます。 この秘密鍵を使って、CSRファイルやサーバー証明書を作成できます。

-algorithmで鍵アルゴリズムを指定できます。 RSA | RSA-PSS | EC | X25519 | X448 | ED25519 | ED448などから選択できます。 大文字/小文字の区別はありません。

-pkeyoptオプションで、鍵アルゴリズムのオプションを指定できます。 上記のサンプルでは、RSA鍵の長さを2048ビットに変更しています。

-outオプションで秘密鍵を保存するファイル名を変更できます。 デフォルトは標準出力に表示されます。

注釈

RSA鍵のみを生成するgenrsaコマンドがあります。 こちらは古いコマンドで、genpkeyを使うことが推奨されています。

証明書署名要求を作成したい(openssl req

// CSRを新規作成
$ openssl req -new -noenc -key private.key -out server.csr -subj "/C=JP/ST=都道府県/L=市町村/O=組織/CN=www.example.com"

// CSRを確認
$ openssl req -in server.csr -text -noout

openssl req -newコマンドで、証明書署名要求(CSR)ファイルを作成できます。

証明書署名要求(CSR; Certificate Signing Request)は、公開鍵基盤(PKI)において証明書を発行してもらうために必要なデータを含んだファイルです。 ユーザー側で作成したCSRファイルを認証局に提出し、サーバー証明書を発行してもらいます。

注釈

CSRの提出方法は、利用する認証局の手順を確認してください。

大学や研究機関の場合、UPKI(University Public Key Infrastructure)が利用できるかもしれません。 UPKIは、国立情報学研究所(NII)が運営する 中間認証局を通じて、X.509証明書を発行してもらえるサービスです。

-keyは、秘密鍵のパスを指定するオプションです。 上記サンプルではopenssl genpkeyで作成した秘密鍵(private.key)を想定して、指定しています。

-outは、CSRを保存するパスを変更するオプションです。 デフォルトは標準出力になっています。 拡張子は.csrとするのが一般的で、上記サンプルではserver.csrとしました。 このファイルを認証局に提出します。

-subjは、CSRに必要なDN情報を設定するオプションです。 1行の文字列で指定します。 -subjを指定しない場合は、DN情報を入力するプロンプトが表示されるので、必要な情報を適宜入力します。

注釈

DN情報(Distinguished Name)は、証明書の所有者を一意に識別するための情報です。

/C=JP       # Country: 国コード(2文字)
/ST=Aichi   # State/Province: 都道府県名
/L=Nagoya city     # Locality: 市区町村名
/O=Nagoya University    # Organization: 組織名
/OU=[skip]    # Organization Unit: 部署名; スキップ
/CN=www.example.com    # Common Name: 証明書を設定するFQDN(ホスト名)

大学や研究機関の場合、CN以外は規定値があるかもしれません。 まず、関連部局の担当者に確認するとよいです。

-noencは、パスフレーズなしの秘密鍵を生成するオプションです。 パスフレーズありのほうが、セキュリティ的に安全なのですが、ウェブサーバーの再起動時にパスフレーズの手動入力が必要になります。 ここでは、ウェブサーバーの再起動を自動化するため、あえてパスフレーズなしにしています。

注意

秘密鍵は平文で保存されるため、アクセス権限の管理には注意してください。

// CSRを新規作成
$ openssl req -new -noenc -newkey rsa:2048 -keyout server.key -out server.csr
// CSRに必要なDN情報を入力する
// -----
Country Name (2 letter code) []: JP # 国名を2文字で入力する
State or Province Name (full name) [Some-State]: Xxxxx # 県名を入力する
Locality Name (eg, city) []: # 都市名
Organization Name (eg, company) []: # 機関名
Organizational Unit Name (eg, section) []: # スキップ
Common Name (e.g. server FQDN or YOUR name) []: # URLを入力する(一番大事)
Email Address []: # スキップ

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # スキップ
An optional company name []: # スキップ

// CSRと秘密鍵を確認
$ ls -l
server.csr
server.key

// CSRの中身をテキスト形式で確認
$ openssl req -in server.csr -noout -text

秘密鍵とCSRを同時に生成したい場合は -keyの代わりに -newkey-keyoutを同時に使用します。

-newkey rsa:ビット長は、鍵長を変更するオプションです。 デフォルトはrsa:2048です。 鍵アルゴリズムと鍵長は、利用する認証局サービスが対応しているかも確認が必要です。 生成された秘密鍵は-keyオプションで指定した鍵と同様に扱われ、CSRや証明書の作成に使用されます。

-keyoutは、-keyと同じように秘密鍵のパスを指定するオプションです。 拡張子は.keyとするのが一般的で、上記ではserver.keyとしました。 このファイルは、CSRを作成する秘密鍵として使用され、SSL証明書を設置するサーバーに配置する秘密鍵です。

作成したCSRはopenssl req -in server.csrで展開して確認できます。 Subject:...などが設定した値になっていればOKです。 内容に間違いがなければ、認証局に提出します。

注釈

CSRはPEM形式で保存されたテキストファイルです。 lessコマンドなどで開くことはできますが、内容はBase64でエンコードされているため、人間には判別できません。

サーバー証明書を確認したい(openssl x509

// 証明書を表示
$ openssl x509 -in server.crt -noout -text

// 証明書の有効期限を確認
$ openssl x509 -in server.crt -noout -dates

openssl x509コマンドでX.509形式の証明書を操作できます。 -inオプションでPEM形式の証明書ファイルを指定します。 -nooutオプションで出力内容に証明書自身を非表示にできます。

PEM形式(Privacy Enhanced Mail)は、Base64でエンコードされたテキスト形式で、秘密鍵/公開鍵や証明書、証明書チェーンを保存する汎用的な形式です。

注釈

ファイルの内容は -----BEGIN-----ENDで囲まれています。 同じPEM形式でも、用途によって次のような拡張子を使用します。

用途

秘密鍵

公開鍵

ファイル名

汎用

.key

.pem / .pub

SSH公開鍵認証

.key / なし

.pub

id_ed25519 / id_ed25519.pub

SSL/TLS証明書

.key

.crt / .cer

server.key / server.crt

証明書チェーン

.pem

.pem

提出したCSRが認証局によって承認されると、サーバー証明書が発行されます。

注釈

UPKI証明書サービスの場合、 サーバー証明書はメールで通知があります。 通知内容にしたがって証明書ファイル(.crt)を取得します。 必要であれば、中間証明書も取得します。

内容に間違いがなければ、サーバー上の適切なパスにアップロードし、サーバーを設定します。

一般的には/etc/ssl/certs/に配置すればよいはずですが、 具体的なパスはサーバーの設定ファイル(/etc/httpd.cnfなど)を確認してください。 正しいパスに証明書を配置したら、サーバーを再起動します。

自己署名証明書したい(openssl req -x509

// 自己署名証明書
$ openssl req -new -x509 -days 365 -noenc -keyout 秘密鍵.key -out 自己署名証明書.crt

// 手順を分解
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

-x509オプションで、CSRを生成せずにX.509形式の自己署名証明書を発行できます。 -dayで有効期限を設定できます。デフォルトは30日(-days 30)です。

自己署名証明書 は、正式な認証局を利用せず、自分自身で署名した証明書です。 いわゆる「オレオレ証明書」です。 おもに開発環境やテスト用で利用する証明書で、本番環境での利用は非推奨です。

注釈

X.509証明書 は公開鍵基盤(PKI; Public Key Infrastructure)で使用される標準形式のデジタル証明書です。 サーバー証明書の拡張子は、Linux環境では.crt、Windows環境では.cerを利用します。

SSLとTLS

暗号化通信のプロトコルにはSSL(Secure Sockets Layer)が利用されていましたが、 セキュリティの問題が多くあったため、現在ではTLS(Transport Layer Security)に置き換わっています。 歴史的経緯から、いまだにSSL証明書と言われますが、利用しているのはTLSプロトコルだそうです。

バージョン

RFC

説明

1994

SSL 1.0

-

Netscapeが開発したが、セキュリティの問題があり公開されなかった

1995

SSL 2.0

-

広く利用されたバージョン

1996

SSL 3.0

-

セキュリティが大幅に改善。TLSの基礎となる技術

1999

TLS 1.0

RFC2246

SSL 3.0をベースにIETFが標準化

2006

TLS 1.1

RFC4346

2009

TLS 1.2

RFC5246

SHA-256をサポート

2011

SSL 2.0 非推奨化

RFC6176

2014

SSL 3.0 非推奨化

RFC7568

2018

TLS 1.3

RFC8446

不要な暗号化方法を削除

2020

TLS 1.0/1.1 非推奨化

主要ブラウザがサポートを終了

暗号化アルゴリズムの変遷

opensslコマンドには、aes-*aria-*、などの暗号化オプションがいろいろあります。 いくつかについて調べてみたところ、現在ではAESが暗号化の標準となっているみたいです。

アルゴリズム名

ブロックサイズ

構造

説明

1975

DES(Data Encryption Standard)

64bit

フェイステル構造

IBMとNSAが共同で開発した暗号化アルゴリズム

1991

IDEA(International Data Encryption Algorithm)

128bit

MA構造

DESの代替として開発された

2001

AES(Advanced Encryption Standard)

128bit

SPN構造

現在も安全性が高く、広く利用されている

2000

Camellia

128bit

フェイステル構造

三菱電機とNTTが開発。日本で採用例が多い

2004

ARIA

128bit

SPN構造

韓国情報保安庁が開発。韓国政府が採用