VPNサーバーにしたいAWSインスタンスがあります。 Windows 7クライアントをAmazonクラウドのプライベートネットワークに接続します。
strongswan-ikev2
パッケージをインストールしました。ipsec version
レポートLinux strongSwan U4.5.2/K3.2.0-52-virtual
これは/etc/ipsec.confです:
config setup
plutostart=no
conn %default
keyexchange=ikev2
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
dpdaction=clear
dpddelay=300s
rekey=no
conn win7vpn
left=%any
leftsubnet=<Amazon VPC CIDR block>
leftauth=pubkey
leftcert=openssl-cert.pem
leftid=<vpn server public dns name>
right=%any
rightsourceip=<Amazon private IP address, which elastic ip is forwarded to>
rightauth=eap-mschapv2
rightsendcert=never
eap_identity=%any
auto=add
これは/etc/ipsec.secretsです:
: RSA openssl-key.rsa
TESTDOMAIN\testuser : EAP "testpassword"
Windowsがサーバーを認証できるように、サーバーのホスト証明書に署名したCA証明書をローカルマシン(ユーザーではない)の証明書ストアに追加しました。
次に、規定どおりにWindows 7クライアントを使用してサーバーに接続しようとします ここ ですが、1つの例外があります-IPアドレスではなくDNS名を使用しています。ユーザー名、ドメイン、パスワードをipsec.secretsファイルに入力すると、接続が試行されます。
そうすると、次のようなstrongSwanログが表示されます。検閲と明確さの両方のために、これらを少し変更しました。 CLIENTPUB/CLIENTPRIVはクライアントのパブリックIPアドレスとプライベートIPアドレスであり、AMAZONPRIVはサーバーのプライベートIPアドレスです(これはサーバーのパブリックIPです-Amazonはこれを「Elastic IP」と呼びます-転送先)。
Sep 4 00:16:17 localhost charon: 14[IKE] CLIENTPUB is initiating an IKE_SA
Sep 4 00:16:17 localhost charon: 14[NET] received packet: from CLIENTPUB[500] to AMAZONPRIV[500]
Sep 4 00:16:17 localhost charon: 14[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
Sep 4 00:16:17 localhost charon: 14[IKE] CLIENTPUB is initiating an IKE_SA
Sep 4 00:16:17 localhost charon: 14[IKE] local Host is behind NAT, sending keep alives
Sep 4 00:16:17 localhost charon: 14[IKE] remote Host is behind NAT
Sep 4 00:16:17 localhost charon: 14[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(MULT_AUTH) ]
Sep 4 00:16:17 localhost charon: 14[NET] sending packet: from AMAZONPRIV[500] to CLIENTPUB[500]
Sep 4 00:16:17 localhost charon: 15[NET] received packet: from CLIENTPUB[4500] to AMAZONPRIV[4500]
Sep 4 00:16:17 localhost charon: 15[ENC] unknown attribute type INTERNAL_IP4_SERVER
Sep 4 00:16:17 localhost charon: 15[ENC] parsed IKE_AUTH request 1 [ IDi CERTREQ N(MOBIKE_SUP) CP(ADDR DNS NBNS SRV) SA TSi TSr ]
Sep 4 00:16:17 localhost charon: 15[IKE] received cert request for "C=US, ST=TX, O=Test CA, CN=Test CA"
Sep 4 00:16:17 localhost charon: 15[IKE] received 316 cert requests for an unknown ca
Sep 4 00:16:17 localhost charon: 15[CFG] looking for peer configs matching AMAZONPRIV[%any]...CLIENTPUB[CLIENTPRIV]
Sep 4 00:16:17 localhost charon: 15[CFG] selected peer config 'dlpvpn'
Sep 4 00:16:17 localhost charon: 15[IKE] initiating EAP-Identity request
Sep 4 00:16:17 localhost charon: 15[IKE] peer supports MOBIKE
Sep 4 00:16:17 localhost charon: 15[IKE] authentication of 'C=US, ST=TX, O=DLP Test CA, CN=vpn.example.com' (myself) with RSA signature successful
Sep 4 00:16:17 localhost charon: 15[IKE] sending end entity cert "C=US, ST=TX, O=DLP Test CA, CN=vpn.example.com"
Sep 4 00:16:17 localhost charon: 15[ENC] generating IKE_AUTH response 1 [ IDr CERT AUTH EAP/REQ/ID ]
Sep 4 00:16:17 localhost charon: 15[NET] sending packet: from AMAZONPRIV[4500] to CLIENTPUB[4500]
この時点で、Windowsはすぐにエラーメッセージをポップアップします。
Verifying user name and password...
Error 13801: IKE authentication credentials are unacceptable
数秒後、charonは再試行して接続を閉じます。
Sep 4 00:16:37 localhost charon: 16[IKE] sending keep alive
Sep 4 00:16:37 localhost charon: 16[NET] sending packet: from AMAZONPRIV[4500] to CLIENTPUB[4500]
Sep 4 00:16:47 localhost charon: 03[JOB] deleting half open IKE_SA after timeout
以上です。
私の知る限り、strongSwan wikiの instructions をすべてフォローしています。
ここで何が悪いのですか?
編集:これは間違いなく証明書の問題です。 MSKB926182で説明されているようにレジストリを編集して再起動することで拡張検証チェックを無効にし(リンクが必要な場合はlol)、VPNサーバーにエラーなしで接続できるようになりました。要件を満たす証明書を生成する方法を見つけ、答えを追加します。 strongSwan wikiのcertページへのポインタを教えてくれた@ecdsaに感謝します。
これを考え出した。 @ecdsaは私を正しい方向に向け、私はようやく このガイド に従って問題を解決することができました。
ipsec pki --gen --type rsa --size 4096 --outform pem > vpnca.key.pem
ipsec pki --self --flag serverAuth --in vpnca.key.pem --type rsa --digest sha1 \
--dn "C=US, O=Example Company, CN=Example VPN CA" --ca > vpnca.crt.der
ipsec pki --gen --type rsa --size 4096 --outform pem > vpn.example.com.key.pem
ipsec pki --pub --in vpn.example.com.key.pem --type rsa > vpn.example.com.csr
ipsec pki --issue --cacert vpnca.crt.der --cakey vpnca.key.pem --digest sha1 \
--dn "C=US, O=Example Company, CN=vpn.example.com" \
--san "vpn.example.com" --flag serverAuth --outform pem \
< vpn.example.com.csr > vpn.example.com.crt.pem
openssl rsa -in vpn.example.com.key.pem -out vpn.example.com.key.der -outform DER
cp vpnca.crt.der /etc/ipsec.d/cacerts
cp vpn.example.com.crt.pem /etc/ipsec.d/certs
cp vpn.example.com.key.der /etc/ipsec.d/private
エラーメッセージは「エラー13801:IKE認証資格情報は受け入れられません」でした。これは、ユーザー資格情報が機能していないように鳴らされました。ただし、これはサーバーの認証サーバーに関するメッセージであり、サーバーのSSL証明書によって(構成ごとに)実行されます。 Microsoftは、このエラーの考えられる原因をリストした IKEv2 VPN接続のトラブルシューティング に関するドキュメントを公開しています。
私の場合、問題はEKU値に関係していました。上でリンクしたガイドに従って、正しいEKU値で証明書を生成することができ、それはうまくいきました。
これをトラブルシューティングするには、WindowsクライアントでEKUチェックを無効にすることができます(もちろん、これはテストのためだけに行う必要があります)。
regedit
を起動しますHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
に移動しますDisableIKENameEkuCheck
というDWORDを追加し、その値を1
に設定します私は同じ問題を抱えており、証明書ファイルに証明書チェーンがあることを確認することで解決しました(エンドエンティティ証明書、中間CA、ルートCA-この順序で)。 TLSは楽しいです。
StrongSwanを再起動した後、これは機能しなくなりましたが、中間CAおよびルートCAを/etc/ipsec.d/cacerts
にドロップすると、再び機能し始めました。
長い検索の結果、このスレッドはIKEv2で動作するWindows Phone 10(WP10)構成を取得しました言及すべきことの1つは、Strongswanを--enable-eap-identity --enable-eap-mschapv2 --enable-openssl(およびおそらく--enable-dhcp)で./configureして、必要なプラグインを用意する必要があることです。そして、はい、証明書を正しく取得する必要があります(サーバー側で-クライアントはサーバーのルートCAを知っているだけで十分です)。