VPN用証明書の作成
やること
iPhoneからVPN接続できるよう、IKEv2なVPN構築する。VPN構築にあたって必要な証明書を作成する。 IKEv2はstrongSwanを使う予定。
CA作成
まずはディレクトリを作る。
$ touch index.txt $ echo 00 > serial $ mkdir private newcerts $ chmod 700 private $ cat << 'EOF' > openssl.conf [ ca ] default_ca = CA_default [ CA_default ] dir = ./ database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/ca.crt serial = $dir/serial private_key = $dir/private/ca.key RANDFILE = $dir/.rand default_days = 365 default_crl_days= 365 default_md = sha256 policy = policy_any email_in_dn = no name_opt = ca_default copy_extensions = none [ policy_any ] countryName = match stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional EOF
CA自体の自己署名の証明書を作る。
$ cat << 'EOF' > ca.conf basicConstraints = CA:true, pathlen:0 keyUsage = digitalSignature,keyCertSign,cRLSign subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer EOF $ openssl req -new -newkey rsa:2048 -keyout private/ca.key -nodes -out ca.csr -subj '/C=JP/CN=VPN Root CA/' $ openssl x509 -req -in ca.csr -signkey private/ca.key -out ca.crt -extfile ca.conf -days 3650 -sha256
サーバー証明書
iPhoneからも接続できるように、EKUに1.3.6.1.5.5.8.2.2を追加しておく。subjectAltNameも忘れずに。
$ openssl req -new -newkey rsa:2048 -nodes -keyout server-strongswan.key -out server-strongswan.csr -subj '/C=JP/O=strongSwan/CN=vpn.example.com/' $ cat << 'EOF' > server.conf keyUsage = digitalSignature extendedKeyUsage = serverAuth,1.3.6.1.5.5.8.2.2 subjectAltName = DNS:vpn.example.com authorityKeyIdentifier=keyid EOF $ openssl ca -config openssl.conf -in server-strongswan.csr -out server-strongswan.crt -extfile server.conf
クライアント証明書
VPNの認証はeap-tlsを使いたいため、クライアント証明書も発行する。 CNと同じ値をsubjectAltNameに追加。この値は、VPNの設定するときにローカルIDに入れる。 PKCS12形式の証明書ができるため、CAの証明書と一緒にiPhoneにメールなどで送る。
$ openssl req -new -newkey rsa:2048 -nodes -keyout client-username.key -out client-username.csr -subj '/C=JP/CN=username@vpnusers/' $ cat << 'EOF' > client.conf keyUsage = digitalSignature extendedKeyUsage = clientAuth subjectAltName = email:username@vpnusers authorityKeyIdentifier=keyid EOF $ openssl ca -config openssl.conf -in client-username.csr -out client-username.crt -extfile client.conf $ openssl pkcs12 -export -in client-username.crt -inkey client-username.key -out client-username.p12