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

SSL / TLS

変更履歴

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

Rev. 0.8 : 2026年03月26日
5章S/MIME証明書の配布   ・・・ 全面見直し
メールソフトで扱う時は、「S/MIME証明書+中間CA証明書」を
マージしたフルチェーン証明書で扱うことを明確にした。
そのために、文章や構成を修正した。

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 S/MIME証明書の配布

本章では、生成したS/MIME証明書ルートCA証明書(ca.crt)の配布について示します。

本章では、文脈によって、S/MIME証明書を「サーバー証明書」、
ルートCA証明書を「中間CA証明書」と言い換えることもあることをお断りしておきます。

通常は、サーバーが信頼の連鎖を辿れるよう、
サーバー証明書中間CA証明書(本記事では、ルートCA証明書として作成)とを
1つのファイルにまとめたもの
を配布します。

1つにまとめたファイルを、フルチェーン証明書と言います。
サーバー証明書 → 中間CA証明書」の順で結合するのが一般的です。

フルチェーン証明書には、
秘密鍵を含んだ自分用のものと、秘密鍵を含まない通信相手に配布するものとがあります。

5.1 自分用フルチェーン証明書の作成

自分のOutlookやThunderbirdが取り込むS/MIME証明書は、一般的に PKCS#12形式
(“.pfx”、または“.p12)の秘密鍵含んだをフルチェーンの形式のファイルです。

このファイルは、秘密鍵を含んでいますので、当然他者に配布してはなりません。

下に示すコマンドで、S/MIME証明書中間CA証明書CRT形式のファイルを、
まとめてフルチェーンのPKCS#12形式に変換します。

下に3.3.1項に示す作業ディレクトリ環境下でのフルチェーン証明書を作成する例を示します。

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

5.2 暗号化メールを送受信するためのフルチェーン証明書の配布

自分宛に暗号化メールを送ってもらうためには、送信相手に自分の公開鍵を含んだS/MIME証明書を、
送信相手のメールソフトに取り込んでもらわなければなりません。

逆に、暗号化メールを送るには、送信相手のS/MIME証明書が必要です。

自分のフルチェーン証明書を渡すには、一般的には下に示すようなアプローチがあります。

ⅰ) デジタル署名付きメールを送信
デジタル署名付きメールを送信。
メール送信先に、S/MIME証明書をメールソフトに取り込んでもらうよう指示を含めます。
デジタル署名付きメールには、S/MIME証明書が添付されます。
基本的には、S/MIME証明書を渡したい相手に、デジタル署名付きメールを送れば、
S/MIME証明書を渡すことができます。
ただし、受信メールからS/MIME証明書を取り出す方法が分りにくいのかもしれません。

ⅱ) Webサイトからのダウンロード
自分のWebサイトにフルチェーンのS/MIME証明書を置いておきます。
メール交換相手には、そこからダウンロードしてもらい、メールソフトに取り込んでもらう
ようにします。

ⅲ) 物理媒体で手渡し
USBメモリのような媒体に、フルチェーンのS/MIME証明書をコピーして手渡す。

ⅱ)ⅲ)の配布用のS/MIME証明書は、
次のように「サーバー証明書 → 中間CA証明書」の順に結合して フルチェーン証明書とします。

【フルチェーン証明書作成例】

配布用のフルチェーン証明書(例: “somebody@example.com.pem”)は、
S/MIME証明書(例: “somebody@example.com.crt”)と
中間CA証明書(例: “ca.crt”)をマージして作成する。

C:\> cd C:\Local\pki\s-mime
&nbsp
C:\> copy /b certs\somebody@example.com.crt  \
+ C:\Local\pki\CA\certs\ca.crt    \
somebody@example.com.pem

5.3 OutlookやThunderbirdにS/MIME証明書を取り込む

自分用の“.p12のフルチェーン証明書
暗号化メール交換相手の“.pemのフルチェーン証明書とも、メールソフトでの取り込み方法は、
全く同じです。

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

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

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

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

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

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

5.3.2 Thunderbirdへの証明書の配布

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

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

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

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

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

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

以上

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

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

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

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

お問い合わせ

 

コメント

Add A Knowledge Base Question !

You will receive an email when your question will be answered.

+ = Verify Human or Spambot ?

タイトルとURLをコピーしました