web-dev-qa-db-ja.com

2レベルの証明書を使用したWPA2 Enterprise(PEAP / MSCHAPv2)への接続のセットアップ

長い間、Debian 7で構成されたNetworkManager + wpa_supplicantを使用して、職場で安全なワイヤレス(PEAP + MSCHAPv2認証を備えたWPA2 Enterprise)に接続することができました。

最近、サーバーの証明書をNetwork Managerの接続設定に組み込むことで、接続のセキュリティを強化したいと考えています。ネットワーク管理者から2つのPEMキーを受け取りました。

  • radius1.pem-RADIUS証明書
  • globalsign_intermediary.pem-中間証明書

RADIUS証明書は、その真正性について中間証明書に依存します。中間証明書は、GlobalSignからの最終的なルートCAに依存します。

これが私の目標です:Wi-Fiネットワークに接続するときはいつでも、私のラップトップにWi-Fiアクセスポイントの信頼性をチェックさせたいです。これらの証明書を接続設定(_/etc/NetworkManager/system-connections/THE-AP-NAME_ファイル)に入れて、この目標を達成するにはどうすればよいですか?具体的には、どのファイルをどこにリストするか(例:構成ファイル)、およびサーバー証明書を検証するために必要な追加手順は何ですか?私が他の場所で見つけたものはすべて1ステップの証明書チェックであり、証明書はおそらく私の場合のような中間CAではなく、確立されたルートCAに依存しているので、ここでこれを質問します。

現在、これは私の接続設定ファイルの内容です(XXXXおよびYYYYは隠された情報を示しています):

_[ipv6]
method=ignore

[connection]
id=XXXXXXXXX
uuid=XXXXXXXXX
type=802-11-wireless
timestamp=1436377448

[802-11-wireless-security]
key-mgmt=wpa-eap

[802-11-wireless]
ssid=XXXXXXXXX
mode=infrastructure
seen-bssids=XXXXXXXXX
security=802-11-wireless-security

[802-1x]
eap=peap;
identity=XXXXXXXXX
password=YYYYYYYYY
ca-cert=/etc/NetworkManager/certs/work/globalsign_intermediary.pem
phase2-auth=mschapv2

[ipv4]
method=auto
_

ご覧のとおり、中間証明書ファイルを使用していました。しかし、これは正しくありませんでした。 RADIUS certファイルのみを使用することも適切ではありませんでした。どちらの場合も、syslogに次のエラーが表示されました。

_Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-STARTED EAP authentication started
Jul  8 12:02:37 wirawan1 kernel: [3880972.051159] wlan0: Limiting TX power to 20 (20 - 0) dBm as advertised by xx:xx:xx:xx:xx
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: tls_connection_ca_cert - Failed to load root certificates error:00000000:lib(0):func(0):reason(0)
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: TLS: Certificate verification failed, error 20 (unable to get local issuer certificate) depth 1 for '/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2'
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-TLS-CERT-ERROR reason=1 depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2' err='unable to get local issuer certificate'
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:unknown CA
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: openssl_handshake - SSL_connect error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Jul  8 12:02:38 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-FAILURE EAP authentication failed
Jul  8 12:02:40 wirawan1 wpa_supplicant[3638]: wlan0: Authentication with xx:xx:xx:xx:xx timed out.
_

どうやら信頼チェーンを確立することはできません。

ハードウェアは(lspci)です。

_03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection
_

Iwlwifi + iwldvmドライバーを使用します。カーネルバージョン3.12.9-1~bpo70+1 (2014-02-07)、debianバックポートパッケージ_linux-image-3.12-0.bpo.1-AMD64_から。

私はLinuxを使い始めたわけではありませんが、Linuxでx509やSSL/TLSのセキュリティを処理する方法がわからないので、手順を追って説明してください。この問題の答えを見つけるためにぐるぐる回ってみて、私は不満を感じました。 WPAサプリカントのドキュメントは、WPA2 Enterpriseと組み合わせて使用​​証明書を議論する上で非常に簡潔です。NetworkManagerのドキュメントはさらに貧弱です。

4

私は結局、組織のITに話しかけて、問題を簡単に解決しました。私の過ちはいくつかの間違いです。

  • 間違った証明書を含む
  • 適切なルート証明書を含まない
  • 証明書を正しい順序で注文していない

「CA証明書」ファイルは、証明書のリストを含む単一のテキストファイル(PEM形式)である必要があります。信頼の順にチェーンされています(最初に信頼度が最も低く、最後に信頼度が最も高い)。 RADIUS証明書を含める必要はありません(含める必要もありません)。RADIUS証明書も有効期間が最短です。アップストリームを含める必要があります。このアプローチを機能させるには、ルート証明書までの証明書を使用します。私の場合、信頼の順序は次のようになります(最低から最高の信頼)。

RADIUS cert -> intermediary cert -> root cert

警告:ケースは大きく異なる場合があります。 IT担当者から、私のルート証明書は「GlobalSign Root R1」であり、次のシリアル番号があることがわかりました。

04:00:00:00:00:01:15:4b:5a:c3:94

私は彼の助けなしではこれを見つけることができなかっただろう。ルート証明書をGlobalSign Webサイト(下記参照)からダウンロードし、バイナリ証明書をPEM形式に変換しました。

$ openssl x509 -inform der -in Root-R1.crt -out Root-R1.pem

次に、ルートとして証明書をチェーンしました

# cat globalsign_intermediary.pem Root-R1.pem > /etc/NetworkManager/certs/work/all-certs.pem

また、NetworkManagerの接続設定にall-certs.pemの完全パスを含めました(GUIを使用するか、質問に記載したテキストファイルを編集します)。ここで、NetworkManagerを再起動します-私のdebianボックスでは、以下を発行することを意味します:

# service networkmanager restart

再起動すると、syslogに示されているようにAPの信頼性を確認できました。

Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=2 subject='/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA'
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2'
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/C=US/XXXXXX (details removed)'
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-MSCHAPV2: Authentication succeeded
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-TLV: TLV Result - Success - EAP-TLV/Phase2 Completed
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully

その他の詳細

興味のある人のために、中間証明書には次の主題があります:

subject= /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2

この「組織」CAは、次に示すように、R1キーを使用する必要があります。

https://support.globalsign.com/customer/portal/articles/1426602-globalsign-root-certificates
5