また、いつからかクライアント証明書の認証ができず、MSCHAPv2で妥協していました。
今回、実家のPCが自動でIPsec VPN接続するように試行錯誤した結果、原因が見えてきましたのでまとめることにしました。
余談ですが、実家のPCをVPN接続させたいのは、自宅のPCから実家のPCにリモートで入り、親のサポートをするためです。
なお、MSCHAPv2ではユーザ名とパスワードの入力が必要になり、実家の親に負担が掛かるため、認証画面のでないクライアント証明書による接続をする必要がありました。
各OSで接続できる認証方式と証明書の種類
まず、各OSが使用できる認証と証明書の組み合わせです。ここで言う『Machine Certificates』とは、コンピュータ証明書のことで、Windowsではmmcで『コンピュータ アカウント』を選択してインストールした証明書を使用する方式です。
EAP-MSCHAPv2も『コンピュータ アカウント』を選択してインストールしたルート証明書を使用します。
認証方式 | 証明書の種類 | Win 7 SP1 | Win 8.1 with Bing | Win 10 (2004) | iPhone iOS10 | macOS Mojave |
---|---|---|---|---|---|---|
Machine Certificates (コンピュータ証明書) | RSA | ○ | ○ | ○ | ×(※) | 未調査 |
ECDSA | ×(Error 13806) | 未調査(おそらく○) | ○ | ○ | ○ | |
EAP-MSCHAPv2 | RSA | 未調査(おそらく○) | ||||
ECDSA | ×(エクスプローラーが固まる) | ○ | ○ | ○ | 未調査 |
上記の通り、Windowsでハマりたくなければ、RSAの証明書を使用した方が良いです。
また、WindowsでECDSAのコンピュータ証明書が使えていないのは私の作り方が悪いのかもしれません。
後述の追記をご参照ください。
逆に、iPhoneでは、RSA証明書がうまくいきませんでした。またプロファイルをミスっているのか…?
※StrongSwan側のログで、『no trusted RSA public key found for ~』と出る。
接続できるクライアント証明書の内容
次に、どのようなクライアント証明書の内容であれば接続ができるかの調査結果です。ハマりたくなければ、一番下の内容で証明書を作成しましょう。
クライアント証明書の内容 | Win 7 SP1 | Win 8.1 with Bing | Win 10 (1703) | iPhone iOS10 | macOS Mojave,Sonoma |
---|---|---|---|---|---|
CN : user SAN : 無し EKU : 無し | 未調査 | 未調査 | 未調査 | 未調査 | 未調査 |
CN : user SAN : vpn.example.com EKU : serverAuth, 1.3.6.1.5.5.8.2.2 | ○ | x | x | 未調査 | 未調査 |
CN : user SAN : user EKU : clientAuth | 未調査 | 未調査 | 未調査 | ○ | ○ |
CN : user@example.com SAN : user@example.com EKU : clientAuth | ○ | ○ | ○ | 未調査 | x |
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!使用したクライアント証明書は以下です。
2024/04/21
macOS Sonomaでクライアント証明書の検証をしました。user@example.comのパターンでは使用できなかったため、xにしました。