OpenWRTでIPSec VPN(6)『CAの構築と証明書の作成』

「OpenWRTでIPSec VPN(6)『CAの構築と証明書の作成』」の編集履歴(バックアップ)一覧はこちら

OpenWRTでIPSec VPN(6)『CAの構築と証明書の作成』」(2020/03/14 (土) 23:09:11) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

この文書では先にCAの設定を行い、X.509証明書を作成します。 以降の作業は基本的にSSHでのCLI作業となります。 *参考情報 この記事を書くにあたって引き続き以下の情報を参考にしています OpenWRTの公式サイトのDocument:[[『install/configure strongswan for IPhone/IPad』>>http://wiki.openwrt.org/inbox/strongswan.howto]] StrongSwan公式サイトのDocument: [[『iOS (Apple iPhone, iPad...) and Mac OS X』>>http://wiki.strongswan.org/projects/strongswan/wiki/IOS_%28Apple%29]] *ファイル名命名規則 この文書における各種秘密鍵・証明書ファイルの命名ルールは慣例に従い、以下のようにします。 |秘密鍵|....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回のコマンドで全て入力して実行してください。 // 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 未署名の公開鍵は二度と使わないので削除しておきます。 root@OpenWrt:/tmp/CA# rm -i /tmp/CA/serverCert_not_singed.tmp DN(識別名)の部分は各自の環境にあわせて修正してください。 ここではあらかじめ『[[OpenWRTでIPSec VPN(3)『DynamicDNS』]]』で取得しておいたドメイン名、ホスト名を使っています。 CN=にダイナミックDNSサービスに登録したホスト名+ドメイン名(FQDN)を記述します。 |パラメータ名|意味|意味|設定例|備考| |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回のコマンドで全て入力して実行してください。 // 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 未署名の公開鍵は二度と使わないので削除しておきます。 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:********* // 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 これで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回のコマンドで全て入力して実行してください。 // 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 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の問い合わせがあります。端末にインストール(インポート)する時に必要になるので忘れないでください。 // openssl pkcs12 -export -inkey androidKey.pem -in androidCert.pem -name "My Android Client Cert" -certfile caCert.pem -caname "MyVPN" -out androidCert.p12 これで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回のコマンドで全て入力して実行してください。 // 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 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の問い合わせがあります。端末にインストール(インポート)する時に必要になるので忘れないでください。 // openssl pkcs12 -export -inkey WindowsKey.pem -in WindowsCert.pem -name "My Windows Client Cert" -certfile caCert.pem -caname "MyVPN" -out WindowsCert.p12 これでWindows用のクライアント証明書『WindowsCert.p12』ができました。 **MacOS X用証明書の作成 作成中 *証明書のバックアップ 証明書が生成できたら、ここで一旦バックアップをとっておきます。 /tmp/CA 以下のファイルをSCPやFTP等を使って作業用PCにコピーし、ファイルは安全なところに保管します。 Windowsでは[[WinSCP>http://winscp.net/eng/docs/lang:jp]]が使いやすいと思います。
この文書では先にCAの設定を行い、X.509証明書を作成します。 以降の作業は基本的にSSHでのCLI作業となります。 *参考情報 この記事を書くにあたって引き続き以下の情報を参考にしています OpenWRTの公式サイトのDocument:[[『install/configure strongswan for IPhone/IPad』>>http://wiki.openwrt.org/inbox/strongswan.howto]] StrongSwan公式サイトのDocument: [[『iOS (Apple iPhone, iPad...) and Mac OS X』>>http://wiki.strongswan.org/projects/strongswan/wiki/IOS_%28Apple%29]] *ファイル名命名規則 この文書における各種秘密鍵・証明書ファイルの命名ルールは慣例に従い、以下のようにします。 |秘密鍵|....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回のコマンドで全て入力して実行してください。 // 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 未署名の公開鍵は二度と使わないので削除しておきます。 root@OpenWrt:/tmp/CA# rm -i /tmp/CA/serverCert_not_singed.tmp DN(識別名)の部分は各自の環境にあわせて修正してください。 ここではあらかじめ『[[OpenWRTでIPSec VPN(3)『DynamicDNS』]]』で取得しておいたドメイン名、ホスト名を使っています。 CN=にダイナミックDNSサービスに登録したホスト名+ドメイン名(FQDN)を記述します。 |パラメータ名|意味|意味|設定例|備考| |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回のコマンドで全て入力して実行してください。 // 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 未署名の公開鍵は二度と使わないので削除しておきます。 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:********* // 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 これで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回のコマンドで全て入力して実行してください。 // 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 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の問い合わせがあります。端末にインストール(インポート)する時に必要になるので忘れないでください。 // openssl pkcs12 -export -inkey androidKey.pem -in androidCert.pem -name "My Android Client Cert" -certfile caCert.pem -caname "MyVPN" -out androidCert.p12 これで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回のコマンドで全て入力して実行してください。 // 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 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の問い合わせがあります。端末にインストール(インポート)する時に必要になるので忘れないでください。 // openssl pkcs12 -export -inkey WindowsKey.pem -in WindowsCert.pem -name "My Windows Client Cert" -certfile caCert.pem -caname "MyVPN" -out WindowsCert.p12 これでWindows用のクライアント証明書『WindowsCert.p12』ができました。 **MacOS X用証明書の作成 作成中 *証明書のバックアップ 証明書が生成できたら、ここで一旦バックアップをとっておきます。 /tmp/CA 以下のファイルをSCPやFTP等を使って作業用PCにコピーし、ファイルは安全なところに保管します。 Windowsでは[[WinSCP>http://winscp.net/eng/docs/lang:jp]]が使いやすいと思います。

表示オプション

横に並べて表示:
変化行の前後のみ表示: