
変更履歴
- 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の、インストール済みOpenSSLはVer.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.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:\> 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)を作成します。
-subj "/C=JP/ST=Tokyo/L=Chiyoda-ku/O=Hoge co.ltd/CN=ca.example.com"
3.3.4 ルートCA証明書(CRT)を自己署名で作成
証明書署名要求(CSR)を使って、ルートCA証明書(CRT)を自己署名で作成します。
下に示すよう、コマンドを実行します。
-signkey CA\private\ca.key -out CA\certs\ca.crt -days 1095
-extensions v3_ca -extfile ext.txt
コマンド実行前に、“-extensions”オプションのパラメータをファイルから取り込むよう、
下に示す内容のテキストファイルを作成しておきます(本記事の例では、ファイル名を“ext.txt”)。
keyUsage=critical,cRLSign,keyCertSign
basicConstraints=critical,CA:TRUE
“basicConstraints(基本制約)“の”CA:TRUE“は、”TRUE“になっていなければなりません。
”FALSE“だと、ルートCA証明書として機能しないようです。
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:\> 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証明書を生成します。
-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
5 証明書の配布
本章では、作成したルートCA証明書(ca.crt)とS/MIME証明書の配布について示します。
本記事のメインテーマではありませんので、軽く触れておくだけにとどめます。
S/MIME証明書ですから、
OutlookやThunderbirdといったメールソフトに取り込まさなければなりません。
また、ルートCA証明書も、メールソフトに取り込ませる必要があります。
ルートCA証明書がなければ、S/MIME証明書を信頼するための証明がなく、
利用できなくなってしまいます。
5.1 証明書の形式を変換
OutlookやThunderbirdが要求する証明書の形式は、
一般的にPKCS#12形式
(“.pfx”、または“.p12)です。
S/MIME証明書のCRT形式のファイルを、下に示すコマンドでPKCS#12形式に変換します。
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証明書を置いておきます。
受信者には、そこからダウンロードしてもらうようにします。
以上
本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
少しでも役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。