iPhone/iPad等iOSに自己署名オレオレCA証明書からサーバー/クライアント証明書を署名しインストールする(2017/4/29更新)

自社サーバーにWebサービスを運用し社員にしかアクセスさせたくない場合などHTTPS/SSLを使う場合が多いです。パスワードログインの場合はパスワードが漏れたらどのデバイスからでもアクセスできてしまいますが、このクライアント証明をデバイスにインストールする方法だとそのデバイスからしかアクセスできない上に、その期限も指定できるので万が一デバイスを紛失しても大丈夫というメリットがあります。

ここでは典型的な自社CA証明書作成からそのCAが認証したサーバー/クライアント証明書のopensslでの作成例を記述します。

CA自己署名証明書の作成

CA用の秘密鍵を作成。

openssl genrsa -out exampleca-privatekey.pem

CA秘密鍵からCA証明書用の要求を作成。質問には適切に答える。

openssl req -new -key exampleserver-privatekey.pem -out exampleca-certificate-request.pem

CA証明書要求の内容を確認。

openssl req -text -in exampleca-certificate-request.pem

CA証明書要求に対して自己署名しCA証明書を作成。この例では365日。

openssl req -x509 -key exampleca-privatekey.pem -in exampleca-certificate-request.pem  -out exampleca-certificate.pem -days 365

CA証明書を確認。

openssl x509 -text -in exapmleca-certificate.pem

サーバー証明書を作成

サーバー秘密鍵を作成。

openssl genrsa -out exampleserver-privatekey.pem

サーバー証明書要求を作成。質問は適切に答える。CNはドメイン名を入力。

openssl req -new -key exampleserver-privatekey.pem -out exampleserver-certificate-request.pem

以下のファイルをv3.extとして作成(example.domain.comはドメイン名に書き換える):ChromeのERR_CERT_COMMON_NAME_INVALID/missing_subjectAltName)への対応(17/4/29追加)

subjectAltName=DNS:example.domain.com

サーバー証明書要求を先ほど作成したCA秘密鍵で署名する。ここでは365日期限。

openssl x509 -req -CA exampleca-certificate.pem -CAkey exampleca-privatekey.pem -CAcreateserial -CAserial exmpleca-serial.srl -in exampleserver-certificate-request.pem -out exampleserver-certificate.pem -days 365 -extfile v3.ext

上記を確認

openssl x509 -text -in exampleserver-certificate.pem

クライアント証明書を作成

クライアント秘密鍵を作成。

openssl genrsa -out exampleclient-privatekey.pem

クライアント証明書要求を作成。質問は適切に答える。

openssl req -new -key exampleclient-privatekey.pem -out exampleclient-certificate-request.pem

クライアント証明書をCA証明書秘密鍵で署名。ここでは30日期間。

openssl x509 -req -in exampleclient-certificate-request.pem -CA exampleca-certificate.pem -CAkey exampleca-privatekey.pem -CAcreateserial  -CAserial exmpleca-serial.srl --out exampleclient-certificate.pem -days 30

最後にブラウザにインポートする為にクライアント証明書と秘密鍵をPKCS#12化。パスワードの設定があります。

openssl pkcs12 -export -in exampleclient-certificate.pem -inkey exampleclient-privatekey.pem -out exampleclient-credential.p12

p12ファイルをメールに添付してiPhone/iPadなどのiOSデバイスに送ります。あとはデバイス側で添付ファイルを開き指示に従います。

(2016/10/2追記):Dropbox経由でもインストールが可能です。p12ファイルをDropboxフォルダに入れ、iPhoneのDropboxアプリからそのファイルのリンクをコピー、Safariのアドレスバーに貼り付けてp12ファイルをダウンロードすれば設定でのインストール画面になります。

クライアント証明書と秘密鍵をChromeにインストール

設定画面のSSL証明書を選択し出たウィンドウにPKCS#12ファイルをドラッグします。 また同じくCA証明書も信頼CAとしてドラッグします。

CA証明書をpem形式からcer形式に変換するには以下の様に行います。

openssl x509 -in ca-certificate.pem -out ca-certificate.cer

クライアント証明書と秘密鍵をiPhone/iPadにインストール

純正のiPhoneConfigurationUtilityを利用します。CA証明書とクライアントのPKCS#12ファイルをロードします。

iPhoneConfigurationUtilityにCA証明書を入れるにはPEMファイルをCERファイルにする必要があります。

openssl x509 -outform deer -in exampleca-certificate.pem -out exampleca-certificate.cer

exportしたファイルをメールに添付してiPhone/iPadなどのiOSデバイスに送ります。あとはデバイス側で添付ファイルを開き指示に従います。

アドバイス

運用としては各秘密鍵はもちろんのこと、証明書要求ファイルも保存しておいたほうが証明書が失効した場合の更新が楽です。署名時には.srlというシリアルファイルができますのでこれもCA証明書と同じフォルダに保存しておいてください。

基本的なことですが、外部漏洩しない様に特に管理しなければいけないファイルは「CA秘密鍵」「サーバー秘密鍵」「クライアント秘密鍵」です。またクライアントのPKCS#12もできれば気をつけたいファイルです。クライアント証明書の使用期限は比較的短めに設定しておきましょう。

この記事を見た人がよく読んでいる記事

トップページ

節約テクノロジ > iPhone/iPad等iOSに自己署名オレオレCA証明書からサーバー/クライアント証明書を署名しインストールする(2017/4/29更新)