【OpenSSL / Windows】無料でS/MIMEを利用するため「オレオレ認証局」を作ってみる

変更履歴

Rev. 0.7 : 2025年04月13日
新規作成

1 はじめに

本記事は、『オレオレ認証局(CA)』と、
オレオレ認証局(CA)を使って S/MIME 証明書の作成の方法を示すものです。

S/MIME証明書は、メール送信におけるデジタル証明の付加や暗号化に使用するものです。
基本的には有料で、インターネットセキュリティ会社に発行してもらいます。
安くて年3,000円の数千円台の価格といったところでしょうか。

オレオレ認証局(CA)S/MIME証明書を自分で作成すれば、
これらの費用は不要となり、無料でS/MIMEを利用できるようになります。

本記事は、オレオレ認証局(CA)と、オレオレ認証局(CA)を使って
S/MIME証明書を作成する方法を 調べたものをまとめした。

オレオレ認証局(CA)S/MIME証明書は、 OpenSSL というソフトウェアを利用して
作成します。
OpenSSLはバッググラウンドのサービスを立ち上げなければならない、と漠然と思っていました。
ですが、実際にはバッググラウンドのサービスを立ち上げる必要はなかったのです。

バッググラウンドのサービスを立ち上げる必要が無いのであれば、
利用環境であるWindowsで作成した方が何かと便利かと思い、
今回はWindowsのOpenSSLオレオレ認証局(CA)S/MIME証明書を作成することにしました。

本記事では、OpenSSL Ver.3の機能に基づいて示しています。
当初作業しようと思っていたRHEL 8の、インストール済みOpenSSLVer.1.1.1です。
もし、RHEL 8で本記事と同じ作業を行うのであれば、Ver.3に更新しなければなりません。

2 Windows 11へOpenSSLをインストール

Windows向けOpenSSLの取得とインストールについては、下に示すページをご覧ください。

OpenSSLでファイルを暗号化・復号化 / Windows 11へのOpenSSLインストール
| すたっくおーばーふろー

ちなみに、Windows向け最新のOpenSSLのバージョンは、
2025/04/10現在“v3.5.0”となっています。

3 オレオレルート認証局(CA)の作成

本章では、『オレオレルート認証局(CA)』の作成について示します。

なお、本章以降、ルート認証局(CA)は、
文脈によって「ルートCA」と略記することもあることをお断りしておきます。

3.1 ファイル拡張子

ルート認証局(CA)証明書S/MIME証明書を作る際、
途中いろいろな拡張子のファイルを作成します。
混乱しやすいので、表3.1-1に整理してみました。

3.2 “openssl.cnf”設定ファイル内容の変更

OpenSSLの設定ファイル“openssl.cnf”ファイルの内容を変更する必要はあまりないと思いますが、
証明書作成条件によっては必要になってくるのかもしれません。

openssl.cnfファイルの場所は、次のコマンドで確かめることができます。

openssl.cnfファイルの設定内容については、次のページでご確認ください。
OpenSSLの設定ファイル(openssl.cnf)の使い方メモ | あぱーブログ

3.3 ルート認証局(CA)証明書の作成

ルート認証局(CA)証明書は、基本的には次の4ステップで作成します。

1. 作業用ディレクトリを作成
2. ルートCA秘密鍵を生成
3. ルートCA証明書証明書署名要求(CSR)を作成
4. ルートCA証明書(CRT)を自己署名で作成

3.3.1 ルートCAの作業用ディレクトリを作成

まず、ルートCA証明書作成のための作業用ディレクトリを作成します。
RHELをはじめとするLinuxでは、“/etc/pki”の下に作られることが多いように思いますが、
Windowsでは任意のディレクトリの下に作ることができます。

ルートCA作成の作業用ディレクトリを親とし、その下には次のサブディレクトリが必要です。

他にもルートCA作成の作業用ディレクトリの下に、次のファイルを用意します。

図3.3-1に、
ルートCA作成の作業用ディレクトリとS/MIME証明書を作成するディレクトリの構成例を示します。

3.3.2 ルートCAの秘密鍵を生成

下に示すように、ルートCA秘密鍵を生成します。

PS C:\> cd C:\Local\pki
 
PS C:\> openssl genpkey -algorithm RSA -out CA\private\ca.key -pkeyopt rsa_keygen_bits:2048

サブコマンド“genpkey”のオプションの内容は、表3.3-1のようになっています。

3.3.3 ルートCA証明書の証明書署名要求(CSR)を作成

次に、ルートCA証明書のための証明書署名要求(CSR)を作成します。

PS C:\> openssl req -new -key CA\private\ca.key -out CA\certs\ca.csr
-subj "/C=JP/ST=Tokyo/L=Chiyoda-ku/O=Hoge co.ltd/CN=ca.example.com"

3.3.4 ルートCA証明書(CRT)を自己署名で作成

証明書署名要求(CSR)を使って、ルートCA証明書(CRT)自己署名で作成します。

下に示すよう、コマンドを実行します。

PS C:\> openssl x509 -req -in CA\certs\ca.csr
-signkey CA\private\ca.key -out CA\certs\ca.crt -days 1095
-extensions v3_ca -extfile ext.txt

コマンド実行前に、“-extensions”オプションのパラメータをファイルから取り込むよう、
下に示す内容のテキストファイルを作成しておきます(本記事の例では、ファイル名を“ext.txt”)。

[v3_ca]
keyUsage=critical,cRLSign,keyCertSign
basicConstraints=critical,CA:TRUE

“basicConstraints(基本制約)“の”CA:TRUE“は、”TRUE“になっていなければなりません。
FALSE“だと、ルートCA証明書として機能しないようです。

3.3.5 ルートCA証明書(CRT)の確認

作成されたルートCA証明書(CRT)は、図3.3-2に示すように確認することができます。

4 S/MIME証明書の作成

S/MIME証明書は、次の2ステップで作成します。

1. S/MIME証明書署名要求(CSR)を作成
2. ルートCA証明書を使ってS/MIME証明書署名要求(CSR)に署名して
S/MIME証明書(CRT)を作成

4.1 S/MIME証明書署名要求(CSR)を作成

まず、S/MIME証明書を発行するために、証明書署名要求(CSR)を生成します。
以下のコマンドを使用します。

PS C:\> cd C:\Local\pki\s-mime
 
PS C:\> openssl req -newkey rsa:4096 -nodes -keyout private/somebody@hogehoge.com.key -out certs/somebody@example.com.csr
-subj "/C=JP/ST=Tokyo/L=Chiyoda-ku/
CN=somebody@example.com/emailAddress=somebody@example.com"

このコマンドを実行すると、次の2つのファイルが作成されます。

1. S/MIME証明書秘密鍵(例では、“somebody@example.com.key”)
2. S/MIME証明書の証明書署名要求(CSR)(例では、“somebody@example.com.csr”)

証明書署名要求(CSR)の作成時に、
いくつかの情報(国名、組織名、CN(共通)名など)を入力する必要があります。

CN名には、S/MIMEを利用するメールアドレスを指定します。
emailAddressにも、メールアドレスを指定します。
CN名とemailAddressは、同じメールアドレスでなければなりません。

4.2 ルートCA証明書を使ってCSRに署名してS/MIME証明書(CRT)を作成

次に、ルートCAを使用してCSRに署名します。

以下に示すようコマンドを使用して、CSRに署名しS/MIME証明書を生成します。

PS C:\> openssl x509 -req -in certs/somebody@exsample.com.csr
-CA C:\Local\pki\CA\certs/ca.crt
-CAkey C:\Local\pki\CA\private\ca.key -CAcreateserial
-out certs\somebody@example.com.crt -days 1095

4.3 S/MIME証明書の確認

作成されたS/MIME証明書(CRT)は、図4.3-1に示すように確認することができます。

5 証明書の配布

本章では、作成したルートCA証明書(ca.crt)とS/MIME証明書の配布について示します。
本記事のメインテーマではありませんので、軽く触れておくだけにとどめます。

S/MIME証明書ですから、
OutlookThunderbirdといったメールソフトに取り込まさなければなりません。

また、ルートCA証明書も、メールソフトに取り込ませる必要があります。
ルートCA証明書がなければ、S/MIME証明書を信頼するための証明がなく、
利用できなくなってしまいます。

5.1 証明書の形式を変換

OutlookThunderbirdが要求する証明書の形式は、
一般的にPKCS#12形式 (“.pfx”、または“.p12)です。

S/MIME証明書CRT形式のファイルを、下に示すコマンドでPKCS#12形式に変換します。

PS C:\> cd C:\Local\pki\s-mime
 
PS C:\> openssl pkcs12 -export -out certs\somebody@example.com.pfx
-inkey private\somebody@example.com.key
-in certs\somebody@example.com.crt

ルートCA証明書は、PKCS#12形式に変換せずともCRT形式のまま取り込めたように思いますが、
ダメだったら、上のコマンドのようにCRT形式のファイルをPKCS#12形式に変換してから
取り込んでください(再試行は面倒なので、お許しください)。

5.2 OutlookやThunderbirdにルートCA証明書とS/MIME証明書を取り込む

5.2.1 Outlookでの証明書の取り込み

わたしの場合、複数のメールアカウントがあって、
多くのアカウントでは OpenPGP を利用しています。
OpenPGPと両立して使用したいので、
Gpg4win の鍵管理ツールKleopatraに取り込ませることにしました。

Outlook直に取り込ませる場合は、次のページを参照いただければと思います。
[クライアント証明書]Outlookで自身のクライアント証明書を設定する方法
| GlobalSign by GMO

図5.2-1に示す Gpg4win / Kleopatraの画面において、
S/MIME証明書ルートCA証明書とも 画面上のメニュー“インポート”で取り込むことができます。

作成したS/MIME証明書に問題がなければ、
該当するメールアドレスの証明書の「信頼レベル」が「完全」となります。

完全」と表示されなければ、S/MIME証明書作成に何か問題があったことを示しています。
再度作り直してください。

5.2.2 Thunderbirdへの証明書の配布

対象アカウントの次のページを開きます。

対象アカウント右クリック⇒「設定」⇒「エンドツーエンド暗号化

まず、図5.2-3で示す画面の「S/MIME証明書の管理(M)」で、
S/MIME証明書ルートCA証明書を取り込みます。

以降の詳しい操作については、次のページをご覧ください。
S/MIME推進協議会 / Thunderbirdの設定

5.3 S/MIMEメール受信者へのルートCA証明書の配布

S/MIMEメール受信者にルートCA証明書を取り込んでもらうには、
一般的には下に示すようなアプローチがあります。
自動的に取り込んでもらうのは、難しいです。

ⅰ) メールに添付
ルートCA証明書をメールに添付して送信する方法です。
受信者に対して、証明書をインストールするように指示を含めます。
 
ⅱ) Webサイトからのダウンロード
自分のWebサイトにルートCA証明書を置いておきます。
受信者には、そこからダウンロードしてもらうようにします。

5.4 S/MIMEによるデジタル署名の適用例

S/MIMEで署名されたメールの受信例を、 図5.4-1にOutlookの場合、 図5.4-2にThunderbirdの場合を示します。

以上

本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。

少しでも役に立てていただければ、うれしく思います。

このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元著者名は明らかにしてください

なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ