KUSONEKOの見る世界

IKEv2で接続できた各OSの認証方式とクライアント証明書

証明書イメージ画像
長いことstrongSwanでIKEv2を使っていますが、サーバを再構築したり、Windowsのアップデートや再インストールで繋がらなくなるということがありました。
また、いつからかクライアント証明書の認証ができず、MSCHAPv2で妥協していました。

今回、実家のPCが自動でIPsec VPN接続するように試行錯誤した結果、原因が見えてきましたのでまとめることにしました。

余談ですが、実家のPCをVPN接続させたいのは、自宅のPCから実家のPCにリモートで入り、親のサポートをするためです。
なお、MSCHAPv2ではユーザ名とパスワードの入力が必要になり、実家の親に負担が掛かるため、認証画面のでないクライアント証明書による接続をする必要がありました。

各OSで接続できる認証方式と証明書の種類

まず、各OSが使用できる認証と証明書の組み合わせです。
ここで言う『Machine Certificates』とは、コンピュータ証明書のことで、Windowsではmmcで『コンピュータ アカウント』を選択してインストールした証明書を使用する方式です。
EAP-MSCHAPv2も『コンピュータ アカウント』を選択してインストールしたルート証明書を使用します。

各OSで接続できる認証方式と証明書の種類
認証方式証明書の種類Win 7 SP1Win 8.1
with Bing
Win 10
(2004)
iPhone iOS10macOS
Mojave
Machine Certificates
(コンピュータ証明書)
RSA×(※)未調査
ECDSA×(Error 13806)未調査(おそらく○)
EAP-MSCHAPv2RSA未調査(おそらく○)
ECDSA×(エクスプローラーが固まる)未調査

上記の通り、Windowsでハマりたくなければ、RSAの証明書を使用した方が良いです。
Windows 7を使用せず、MSCHAPv2でもよければ、ECDSAを使うのはありです。
また、WindowsでECDSAのコンピュータ証明書が使えていないのは私の作り方が悪いのかもしれません。
→Windows10でECDSA証明書によるコンピュータ証明書認証をする方法が分かりました。
後述の追記をご参照ください。

逆に、iPhoneでは、RSA証明書がうまくいきませんでした。またプロファイルをミスっているのか…?
※StrongSwan側のログで、『no trusted RSA public key found for ~』と出る。

接続できるクライアント証明書の内容

次に、どのようなクライアント証明書の内容であれば接続ができるかの調査結果です。
ハマりたくなければ、一番下の内容で証明書を作成しましょう。

接続できるクライアント証明書の内容
クライアント証明書の内容Win 7 SP1Win 8.1
with Bing
Win 10
(1703)
iPhone iOS10macOS
Mojave,Sonoma
CN : user
SAN : 無し
EKU : 無し
未調査未調査未調査未調査未調査
CN : user
SAN : vpn.example.com
EKU : serverAuth, 1.3.6.1.5.5.8.2.2
xx未調査未調査
CN : user
SAN : user
EKU : clientAuth
未調査未調査未調査
CN : user@example.com
SAN : user@example.com
EKU : clientAuth
未調査x
※CN = CommonName
 SAN = Subject Alternative Name
 EKU = Extended Key Usage


iPhone7でEAP-MSCHAPv2の接続したときの設定はこちら
iPhone7でMachine Certificates(クライアント証明書)の接続したときの設定はこちら

追記

2018/10/14

iPhone XS iOS12.0.1でも問題なく接続できました。

2018/11/11

macOS Mojaveの結果を追加しました。
iOSと一緒かと思われます。

2020/09/07 WindowsのECDSA証明書の使い方

WindowsでECDSA証明書を使用したコンピュータ証明書認証のやり方が分かりました。
Windows10で確認が取れたため、表中のWin10を○に変更しました。
Windows8.1でもできると思いますが、未調査です。

やり方は、DH(Diffie Hellman)グループをECPにすることです。
Windowsの実装では、IKE_SA_INITで選択されたDHグループにより、使用する証明書が決まるようです。
ECP256(Group 19)になった場合は、鍵長256のECDSA証明書、
ECP384(Group 20)になった場合は、鍵長384のECDSA証明書、
MODP*になった場合は、RSA証明書を使用するようです。

最後に、鍵長384のECDSA証明書を使用する例を記載します。
Windowsでは、PowerShellで指定します。
Set-VpnConnectionIPsecConfiguration -Name "VPN" -CipherTransformConstants AES256 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup ECP384 -AuthenticationTransformConstants SHA256128 -PfsGroup None -Force
レジストリで、NegotiateDH2048_AES256を追加しているならば、削除するか値を0にしてください。

strongSwanでは、ipsec.confでECPを指定します。
     ike=aes256-sha256-ecp384!
     esp=aes256-sha256!
使用したクライアント証明書は以下です。
Windowsで使用したECDSA証明書

2024/04/21

macOS Sonomaでクライアント証明書の検証をしました。
user@example.comのパターンでは使用できなかったため、xにしました。