この文書では先にCAの設定を行い、X.509証明書を作成します。
以降の作業は基本的にSSHでのCLI作業となります。
参考情報
ファイル名命名規則
この文書における各種秘密鍵・証明書ファイルの命名ルールは慣例に従い、以下のようにします。
秘密鍵 |
....Key.* |
caKey.pem、serverKey.pemなど |
証明書(公開鍵) |
....Cert.* |
caCert.pem、clientCert.p12 など |
作業用 |
*.tmp |
|
CA(認証局)の設定
クライアント証明書の発行元となるCAの設定を行います。
といっても、daemonの設定を行うわけではなく、CAの秘密鍵と証明書を作成するだけです。
ファイルをramdisk 上に生成するために /tmp に作業ディレクトリを作成します。
うっかり残したままにしておいて流出のリスクを減らすためです。
このため作業途中で再起動させるとファイルは消え、最初からやり直しになります。
root@OpenWrt:/# mkdir /tmp/CA
root@OpenWrt:/# cd /tmp/CA
root@OpenWrt:/tmp/CA#
(2014/11/02追記ここから)
なお、ここからの作業で
no files found matching '/etc/strongswan.d/charon/*.conf', ignored
no files found matching '/etc/strongswan.d/*.conf', ignored
というエラーが出ても無視してよい模様です。
作成しようとしているファイル(***.pem等)がちゃんと出来ていれば次に進んでください。
(2014/11/02追記ここまで)
CAの秘密鍵を作成します。(10~30秒程度かかります)
root@OpenWrt:/tmp/CA# ipsec pki --gen --outform pem > caKey.pem
CAの秘密鍵を自己署名してプライベートなルートCA証明書を作成します。
root@OpenWrt:/tmp/CA# ipsec pki --self --in caKey.pem --dn "C=JP, O=MyVPN, CN=home.lan" --ca --outform pem > caCert.pem
これでルートCA証明書『caCert.pem』ができました。
※これは俗に言う「オレオレ証明書」になりますが、作成者本人がその出所を認識して使う分には問題ありません。
Server証明書(= OpenWRTルータの証明書)の作成
OpenWRTルータ用の秘密鍵を生成します(10~30秒程度かかります)
root@OpenWrt:/tmp/CA# ipsec pki --gen --outform pem > serverKey.pem
以下のコマンドで秘密鍵から公開鍵(証明書)を生成します。
root@OpenWrt:/tmp/CA# ipsec pki --pub --in serverKey.pem > serverCert_not_singed.tmp
※ここではステップをわかりやすくするために一度ファイル化していますが、
後で削除するので参考サイトのようにリダイレクトさせて処理してもOKです。
このままでは電子署名されていないので使用できないので、
この公開鍵をプライベートなルートCA証明書を使って電子署名します。
root@OpenWrt:/tmp/CA# ipsec pki --issue --in serverCert_not_singed.tmp --cacert caCert.pem --cakey caKey.pem
--dn "C=JP, O=My_OpenWRT_Router , CN=gtx.odwtztk.wig.jp" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
※wikiの関係で2行に分割してます。1回のコマンドで全て入力して実行してください。
未署名の公開鍵は二度と使わないので削除しておきます。
root@OpenWrt:/tmp/CA# rm -i /tmp/CA/serverCert_not_singed.tmp
パラメータ名 |
意味 |
意味 |
設定例 |
備考 |
C |
Country |
国名 |
JP |
StrongSwanのdefault値はCH、OpenWRTのDocument例ではDEになっています。 |
O |
Organization |
組織名 |
My OpenWRT Router |
SSL用の証明書では会社名などを記載。実質上証明書の説明書きになるので、認識しやすい名称に。 |
CN |
Common Name |
コモンネーム |
gtx.odwtztk.wig.jp |
SSL用の証明書ではURLとなるホスト名。IPSec接続先のOpenWRTルータのFQDN名。最も重要で間違うと接続できない。 |
これで『caCert.pem』で署名済みのOpenWRTルータのServer証明書『serverCert.pem』が出来ました。
Client証明書(=端末用の証明書)の作成
ここでは端末用の証明書を作成します。
iOS用証明書の作成
最初にiPhone用の秘密鍵を作成します。
root@OpenWrt:/tmp/CA# ipsec pki --gen --outform pem > iPhoneKey.pem
秘密鍵から公開鍵(証明書)を生成します。
root@OpenWrt:/tmp/CA# ipsec pki --pub --in iPhoneKey.pem > iPhoneCert_not_singed.tmp
プライベートなルートCA証明書を使って電子署名します。
root@OpenWrt:/tmp/CA# ipsec pki --issue --in iPhoneCert_not_singed.tmp --cacert caCert.pem --cakey caKey.pem
--dn "C=JP, O=My iPhone , CN=My iPhone Client Cert" --outform pem > iPhoneCert.pem
※wikiの関係で2行に分割してます。1回のコマンドで全て入力して実行してください。
未署名の公開鍵は二度と使わないので削除しておきます。
root@OpenWrt:/tmp/CA# rm -i /tmp/CA/serverCert_not_singed.tmp
OpenSSLを使ってca証明書「caCert.pem」、Client秘密鍵「iPhoneKey.pem」、Client証明書「iPhoneCert.pem」の3つをまとめてPKCS#12形式の証明書「iPhoneCert.p12」を作成します。
root@OpenWrt:/tmp/CA# openssl pkcs12 -export -inkey iPhoneKey.pem -in iPhoneCert.pem -name "My iPhone Client Cert"
-certfile caCert.pem -caname "MyVPN" -out iPhoneCert.p12
※wikiの関係で2行に分割してます。1回のコマンドで全て入力して実行してください。
Export Passwordの問い合わせがあります。この証明書をiOS端末にインストール(インポート)する時に必要になります。このパスワードは忘れないでください。
Enter Export Password:*********
Verifying - Enter Export Password:*********
これでiPhone用のクライアント証明書『iPhoneCert.p12』ができました。
Android用証明書の作成
実はiOSの場合とやり方は一緒です。
最初に秘密鍵を作成します。
root@OpenWrt:/tmp/CA# ipsec pki --gen --outform pem > androidKey.pem
秘密鍵から公開鍵(証明書)を生成し、リダイレクトでプライベートなルートCA証明書を使って電子署名します。
root@OpenWrt:/tmp/CA# ipsec pki --pub --in androidKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem
--dn "C=JP, O=My Android Phone , CN=My Android Client Cert" --outform pem > androidCert.pem
※wikiの関係で2行に分割してます。1回のコマンドで全て入力して実行してください。
OpenSSLを使ってandroidCert.pem androidKey.pem caCert.pem をPKCS#12形式の証明書にまとめます。
root@OpenWrt:/tmp/CA# openssl pkcs12 -export -inkey androidKey.pem -in androidCert.pem -name "My Android Client Cert"
-certfile caCert.pem -caname "MyVPN" -out androidCert.p12
※wikiの関係で2行に分割してます。1回のコマンドで全て入力して実行してください。
Export Passwordの問い合わせがあります。端末にインストール(インポート)する時に必要になるので忘れないでください。
これでAndroid用のクライアント証明書『androidCert.p12』ができました。
Windows用証明書の作成
実はiOS/Androidの場合とやり方は一緒です。
最初に秘密鍵を作成します。
root@OpenWrt:/tmp/CA# ipsec pki --gen --outform pem > WindowsKey.pem
秘密鍵から公開鍵(証明書)を生成し、リダイレクトでプライベートなルートCA証明書を使って電子署名します。
root@OpenWrt:/tmp/CA# ipsec pki --pub --in WindowsKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem
--dn "C=JP, O=My Windows PC, CN=My Windows Client Cert" --outform pem > WindowsCert.pem
※wikiの関係で2行に分割してます。1回のコマンドで全て入力して実行してください。
OpenSSLを使ってPKCS#12形式の証明書にまとめます。
root@OpenWrt:/tmp/CA# openssl pkcs12 -export -inkey WindowsKey.pem -in WindowsCert.pem -name "My Windows Client Cert"
-certfile caCert.pem -caname "MyVPN" -out WindowsCert.p12
※wikiの関係で2行に分割してます。1回のコマンドで全て入力して実行してください。
Export Passwordの問い合わせがあります。端末にインストール(インポート)する時に必要になるので忘れないでください。
これでWindows用のクライアント証明書『WindowsCert.p12』ができました。
MacOS X用証明書の作成
作成中
証明書のバックアップ
証明書が生成できたら、ここで一旦バックアップをとっておきます。
/tmp/CA 以下のファイルをSCPやFTP等を使って作業用PCにコピーし、ファイルは安全なところに保管します。
Windowsでは
WinSCPが使いやすいと思います。
最終更新:2020年03月14日 23:09