SoftEther VPNによるVPN環境構築(21) TLSサーバー検証をオンにするために必要なこと

サーバー構築
この記事内には広告が含まれています。
(PR)

「SSTP Connect」でTLSサーバー検証をオフにすると「危険です!!」と警告が表示されます。だからと言ってオンにするとVPN接続できません。

ここでは、SoftEther VPN ServerでTLSサーバー検証をオンにするための準備とその影響について説明します。

危険です??

SoftEtherVPN-SSTP-Connect-102

「SSTP Connect」を使用してSoftEther VPN Serverに接続する方法を説明しました。

この中では「TLSサーバ検証」をあえて「オフ」にするように説明しています。理由は「電子証明書」や「公開鍵暗号方式」というやや難しい話となってしまうからです。

実はOpenVPNでもTLSサーバー検証を行っているのですが、プロファイルの作成過程で自動的に組み込まれるため、知らなくても使えてしまいます。

とは言え「SSTP Connect」で「TLSサーバ検証」を「オフ」にするとこのように表示されるので心配な方もいると思われます。「サーバ管理者に連絡して」と言われてもSoftEther VPN Serverを自分で構築した場合は、自分が解らなければ誰に聞けばよいのかという話になります。

ここでは順番に説明していきます。

SoftEtherVPN-SSTP-Connect-101

 

中間者攻撃(MITM)

中間者攻撃(MITM)(Man in The Middle attack)とは何かを説明する前に、VPN通信にも使われている「公開鍵暗号方式」について説明します。

VPN通信はSoftEther VPN Serverとクライアント端末の間の通信を、インターネットという誰でも盗聴や改ざんが可能なネットワークでも安全に使える通信手段です。

どうして安全に使えるのかというと通信するデータが暗号化されているからです。暗号化されているので解読できなければ覗けませんし、暗号化されたまま改ざんすれば復号できませんので破棄されます。

SoftEtherVPN-SSTP-Connect-102

VPN通信ではありませんが、ネットショッピングで安全にクレジットカードを使えるhttps://で始まるURLのSSL通信も同じ仕組みです。

 

ここでは難しいことは省いて中間者攻撃(MITM)に関係する概念だけ説明します。

VPN通信の開始に使われるのが「公開鍵暗号方式」です。

「閉じる」カギと「開ける」カギが異なる特殊な金庫があるとします。

SoftEtherVPN-SSTP-Connect-103

送信者はVPN通信を始める時に「閉じる」カギを送る相手から取り寄せます。

送信者はデータを金庫に入れて「閉じる」カギで閉じた後、相手に送ります。覗こうとする者は、金庫も「閉じる」カギも入手することはできますが「開ける」カギを持っていないので金庫の中身を見ることはできません。

SoftEtherVPN-SSTP-Connect-104

覗こうとする者はこのままでは覗けないため、偽の「閉じる」カギと偽の「開ける」カギと偽の金庫を用意します。

SoftEtherVPN-SSTP-Connect-105

そして、セキュリティホールなどを利用してVPN通信経路を変えてしまいます。

送信者はVPN通信を開始するごとに「閉じる」カギを相手から取り寄せようとします。しかしVPN通信経路が変わっているため、送る相手ではなく覗こうとする者から偽の「閉じる」カギを取り寄せてしまいます。

送信者は偽の「閉じる」カギと気付かずにデータを偽の金庫に入れて送ってしまいます。

覗こうとする者は、偽の「開ける」カギを使って偽の金庫を開けて、データを取り出してしまいます。覗こうとする者はデータを確認した後に金庫に入れて、本来の送る相手から取り寄せた「閉じる」カギで閉じて相手に送ります。

送信者も送る相手もデータは正しく送られているので、覗かれていることに気付きません。

これが中間者攻撃(MITM)です。

SoftEtherVPN-SSTP-Connect-106

実際のVPN通信では、金庫に入れて送るデータは、それ以降の暗号化通信で使われる共通のカギです。そのため金庫が開けられた時点で覗こうとする者に共通のカギが渡ってしまいます。以後の通信は暗号化されていても覗こうとする者は共通カギで解読できますので、データは見放題となってしまいます。

 

TLSサーバー検証

中間者攻撃(MITM)が起きる原因は「閉じる」カギと偽の「閉じる」カギの区別が付かないことにあります。

そこで「閉じる」カギに製造社の「タグ」を付けます。「タグ」は偽造できない工夫がされており「タグ」が偽物かどうかは誰でも確認できます。

SoftEtherVPN-SSTP-Connect-107

概念で説明した言葉と実際の「公開鍵暗号」との名称の対応は、

  • 「閉じる」カギは誰でも入手できるため「公開鍵」と呼ばれます
  • 「開ける」カギは送る相手だけが持っているため「秘密鍵」と呼ばれます
  • 「タグ」はカギが正しいことを証明する「サーバー証明書」に対応します

この「タグ」を確認する=「サーバー証明書」を確認する行為を「SSTP Connect」では「TLSサーバ検証」と呼んでいます。

「TLS」(Transport Layer Security)とは「SSL」(Secure Sockets Layer)の後継プロトコルです。

 

したがって、「TLSサーバ検証」をオフにするということは、VPN通信をしていても上記のように覗かれても気付くことができないことになります。

個人で建てたSoftEther VPN Serverに中間者攻撃(MITM)を仕掛けてくるハッカーなどいないでしょう。金になる情報など無いからです。

個人をターゲットに仕掛けてくるとすれば国家権力とか興信所の類などでしょう。そのため個人でも犯罪に巻き込まれないように自己防衛は必要です。

 

SoftEther VPN Serverのサーバー証明書

話をSoftEther VPN Serverに戻します。

SoftEther VPN Serverには元々TLSサーバー検証に対応するための仕組みが組み込まれています。そしてセットアップの段階で公開鍵とサーバー証明書が自動的に生成されています。

「SoftEther VPNサーバー管理マネージャ」でSoftEther VPN Serverに接続して、「暗号化と通信関係の設定」をクリックするとこの画面が表示されます。

「サーバー証明書」の部分に表示されているようにサーバー証明書は作成されています。

(ダイナミックDNSホスト名を設定していない場合はサーバー証明書がSoftEther VPN Serverパソコンのコンピューター名で作成されます。その場合はダイナミックDNSホスト名とサーバー証明書のホスト名が一致しないため正しく機能しない可能性があります)

SoftEtherVPN-SSTP-Connect-111

サーバー証明書が作成されているのに「SSTP Connect」で「TLSサーバ検証」をオンにするとエラーとなる理由は、iOS 13から変更された証明書の扱いにあります。

問題となる項目は次の2点です。

  • TLS サーバ証明書は、証明書の SAN (Subject Alternative Name) 拡張領域にサーバの DNS 名を記述する必要がある。証明書の CommonName の DNS 名は今後は信頼されなくなります。
  • TLS サーバ証明書の有効期間は 825 日以下である (証明書の NotBefore フィールドと NotAfter フィールドで明記)。

SoftEther VPN Serverで生成されるサーバー証明書はルート証明書(自己署名証明書)ですが、SAN拡張領域への記述はありません。また、証明書の有効期間はデフォルトでは3650日に設定されています。

ここで説明する方法でサーバー証明書を作成するとSAN拡張領域にDNS名が記述された証明書が作成されます。

なお、iOSでの有効期間の制限はサーバー証明書に関するものですので、ルート証明書としては3650日でも問題ありません。そのため、以下では自動生成された有効期間3650日の自己署名証明書(ルート証明書)を署名のためのルート証明書として使用します。

 

TLSサーバー検証に合格するための設定

TLSサーバー検証に合格するためには、以下の手順でSoftEther VPN Serverのサーバー証明書の差し替えとiOS/iPadOS機器へのルート証明書の登録が必要です。

ただし後で説明しますが、OpenVPNの接続設定をモバイル機器で行っている場合は、プロファイルの修正とプロファイルの再登録が必要です。これを行わないとOpenVPNで接続できなくなります。

なお、以下の説明はIPv6接続とIPv4接続で共通です。

「SSTP Connect」のヘルプページにも作成方法が掲載されました。

 

1.ルート証明書のエクスポート

「SoftEther VPNサーバー管理マネージャ」を起動してSoftEther VPN Serverを選択して「接続」をクリックします。

SoftEtherVPN-SSTP-Connect-121

「サーバー情報の参照および設定」という部分の「暗号化と通信関係の設定」をクリックします。

SoftEtherVPN-SSTP-Connect-122

「サーバー証明書」という部分の「エクスポート」をクリックします。

SoftEtherVPN-SSTP-Connect-123

「X.509証明書ファイル(CER)と秘密鍵ファイル(KEY)の組合せとして保存する」を選択します。「秘密鍵の保護」でパスフレーズ(パスワード)を設定することで保護できますが、パスフレーズを忘れるとすべてやり直しとなりますので注意してください。

すべて設定したら「OK」をクリックします。

SoftEtherVPN-SSTP-Connect-124

任意のファイル名を入力して、任意のフォルダーに「保存」をクリックして「ルート証明書」を保存します。

SoftEtherVPN-SSTP-Connect-125

続けての秘密鍵の保存では、同じファイル名が表示されるので「保存」をクリックして「ルート秘密鍵」を保存します。

「ルート証明書」と「ルート秘密鍵」はペアなので、必ず同じファイル名にしてください。

SoftEtherVPN-SSTP-Connect-126

正しく保存できたので「OK」をクリックしてダイアログを閉じます。

SoftEtherVPN-SSTP-Connect-127

保存したフォルダーに2つのファイルが保存されていることを確認します。

このファイルはいろいろと使いますので、失くさないように保存しておいてください。

SoftEtherVPN-SSTP-Connect-128

もしも失くしてしまった場合は、下記「2.サーバー証明書の再作成」の手順の「証明書の種類」で、「ルート証明書(自己署名証明書)」を選択して「ルート証明書」を再作成してください。

 

2.サーバー証明書の再作成

サーバー証明書を作り直します。

「サーバー証明書」という部分の「新規作成」をクリックします。

SoftEtherVPN-SSTP-Connect-131

「証明書の種類」で「他の証明書によって署名された証明書」を選択して、「証明書と秘密鍵の読み込み」をクリックします。

SoftEtherVPN-SSTP-Connect-132

先ほど保存した「ルート証明書ファイル」を選択して「開く」をクリックします。

SoftEtherVPN-SSTP-Connect-133

続けて「ルート秘密鍵ファイル」を選択して「開く」をクリックします。

SoftEtherVPN-SSTP-Connect-134

読み込んだ「ルート証明書」の内容が表示されます。

残りの項目を次のように入力します。

  • 名前(CN):vpnXXXXXXXXX.softether.net(既定で表示されている)
  • 証明書の有効期間:824
  • 暗号強度:2048

証明書の有効期間は825日以下とする必要がありますが、内部では秒単位に換算するので端数の切り上げで825日を超える可能性があるため、824日以下とする方がよいでしょう。

設定したら「OK」をクリックします。

SoftEtherVPN-SSTP-Connect-135

注意すべき点が表示されるので読んだら「はい」をクリックします。

SoftEtherVPN-SSTP-Connect-136

サーバー証明書に新しいサーバー証明書が表示されますが違いは有効期限だけです。

「OK」をクリックして閉じます。

SoftEtherVPN-SSTP-Connect-137

注意すべき点が表示されるので読んだら「はい」をクリックします。

対処方法は後で説明します。

SoftEtherVPN-SSTP-Connect-138

SoftEther VPN Serverの設定は終了なので「閉じる」をクリックします。

SoftEtherVPN-SSTP-Connect-139

「SoftEther VPNサーバー管理マネージャの終了」をクリックして閉じます。

SoftEtherVPN-SSTP-Connect-140

 

3.ルート証明書のiOS/iPadOS機器へのインストール

「1.ルート証明書のエクスポート」でエクスポートした「ルート証明書」をiPhoneやiPadにインストールするためには、「ルート証明書」をiPhoneやiPadに転送する必要があります。

クラウド経由やUSBストレージからファイルアプリで読み込む方法や、メールに添付して自分に送る方法などがあります。ここではメールに添付して自分に送りました。

メールを開き、添付されたルート証明書をタップします。

SoftEtherVPN-SSTP-Connect-151

Apple Watchを利用している場合は、インストールするデバイスが問われますので、「iPhone」をタップします。

SoftEtherVPN-SSTP-Connect-152

iOS/iPadOSにおいて「ルート証明書」などの電子証明書はプロファイルとして扱われます。

「閉じる」をタップします。

SoftEtherVPN-SSTP-Connect-153

「設定」アプリを開くとインストールする準備ができているので、「プロファイルがダウンロード済み」をタップします。

SoftEtherVPN-SSTP-Connect-154

プロファイルをインストールするので「インストール」をタップします。

SoftEtherVPN-SSTP-Connect-155

パスコードを設定している場合は「パスコード」を入力します。

SoftEtherVPN-SSTP-Connect-156

警告が表示されますが、自分で作成したプロファイル(ルート証明書)ですので、そのまま「インストール」をタップします。

SoftEtherVPN-SSTP-Connect-157

画面の下に最終確認が表示されますので「インストール」をタップします。

SoftEtherVPN-SSTP-Connect-158

インストール作業は終わったので「完了」をタップします。

SoftEtherVPN-SSTP-Connect-159

プロファイルの一覧画面に戻りますので、「< 一般」で更に前の画面に戻ります。

SoftEtherVPN-SSTP-Connect-160

「設定」アプリの「一般」に戻りますので一番上の「情報」をタップします。

SoftEtherVPN-SSTP-Connect-161

「情報」の画面を一番下までスクロールします。

SoftEtherVPN-SSTP-Connect-162

「証明書信頼設定」をタップします。

SoftEtherVPN-SSTP-Connect-163

インストールしたルート証明書の右のスイッチをタップして「オン」にします。

SoftEtherVPN-SSTP-Connect-164

「第三者がウェブサイトに送信されたプライベートなデータをすべて見ることができるようになります。」とありますが、それは「ルート証明書」の出所が分からない場合の話です。

ここで信頼するのは自分で作成した「ルート証明書」なので問題ありません。

「続ける」をタップします。

SoftEtherVPN-SSTP-Connect-165

スイッチが「オン」になっていることを確認して「設定」アプリを終了します。

SoftEtherVPN-SSTP-Connect-166

 

4.「SSTP Connect」で「TLSサーバ検証」を有効化

「SSTP Connect」を起動します。

プロファイルを右にスワイプします。

SoftEtherVPN-SSTP-Connect-171

表示された「編集」をタップします。

SoftEtherVPN-SSTP-Connect-172

「TLSサーバ検証」のスイッチを「オン」にします。

SoftEtherVPN-SSTP-Connect-173

「オン」になったことを確認したら「保存」をタップして変更を保存します。

SoftEtherVPN-SSTP-Connect-174

 

通信テスト

「SSTP Connect」を起動します。

プロファイル名の横のスイッチを「オン」にしてSoftEther VPN Serverに接続します。

SoftEtherVPN-SSTP-Connect-181

正しく設定できていれば「接続済み」と表示され、SoftEther VPN Serverに接続できます。

経過時間をタップしてログを表示します。

SoftEtherVPN-SSTP-Connect-182

ログを見ると「TLS certificate validated」とあり、TLSサーバー検証に合格していることが分かります。

SoftEtherVPN-SSTP-Connect-183

 

サーバー証明書の再作成の弊害

SoftEther VPN Serverで作成されるOpenVPNのプロファイルには、TLSサーバー検証のための「ルート証明書」が組み込まれています。

しかし、これまでの設定で「ルート証明書」はエクスポートして、新しいサーバー証明書に置き換えてしまいました。

したがってSoftEther VPN Serverは「ルート証明書」を持っておらず、「ルート証明書」を組み込んだOpenVPNのプロファイルを作成することができません。

また、サーバー証明書を再作成する前に作成したOpenVPNのプロファイルもサーバー証明書が自己署名証明書ではなくなりましたので、変更が必要になります。

テストではWindows版とLinux版で動作が違いました。

 

Windows版の場合

OpenVPNプロファイルの新規作成と古いプロファイルの流用について説明します。

 

OpenVPNプロファイルの新規作成

ルート証明書ファイルを次のフォルダーにコピーします。

  • C:\Program Files\SoftEther VPN Server\chain_certs

この状態でOpenVPNプロファイルを作り直します。SoftEther VPN Serverの再起動は必要ありません。

作成したプロファイルをモバイル機器に登録し直してください。

 

古いOpenVPNプロファイルを使う場合

利用するOpenVPNのプロファイルとルート証明書をWindowsのメモ帳以外のテキストエディターで開きます。

<ca>から</ca>までの部分を

SoftEtherVPN-SSTP-Connect-191

「ルート証明書」の内容に置き換えます。

SoftEtherVPN-SSTP-Connect-192

OpenVPNのプロファイルを保存してから、モバイル端末に登録し直して、OpenVPN ConnectアプリでSoftEther VPN Serverに接続できるか確認します。

 

Linux版の場合

OpenVPNプロファイルを作り直して、インストールし直してください。

/usr/local/vpnserver/chain_certs にルート証明書ファイルを置く必要はありません。

 

注意点

いくつかの注意点を説明します。

 

「SSTP Connect」の「ホスト名」

「SSTP Connect」のプロファイルにおいてSoftEther VPN Serverへの接続は、「サーバ」に指定したDNS名またはIPアドレスに対して行われるので、「ホスト名」は未設定でも動作します。

ただし、「ホスト名」は特殊な状況でのTLSサーバー検証で必要となります。

「サーバ」にはDDNS名だけでなく、IPアドレスを設定することもできます。IPアドレスを設定した場合、サーバー証明書のDNS名と一致しませんのでTLSサーバー検証が通りません。

そのような場合は、「ホスト名」にDNS名を設定すると、そのDNS名とサーバー証明書のDNS名が比較されるそうです。

 

サーバー証明書の有効期間

今回作成したサーバー証明書は有効期間が824日ですので、約2年3ヶ月後に有効期間が切れます。

その場合は、再度サーバー証明書を作成する必要があります。その時に使うルート証明書は有効期間が切れていなければ、今回と同じものが使えます。

 

オレオレ証明書

SoftEther VPN Serverが持つ認証局のように自分で作成して自分で署名する証明書をオレオレ証明書と言うそうです。

個人で使う場合は問題ありませんが、ある程度大きな団体で使う場合は、正式なサーバー証明書を購入した方が良いでしょう。その場合はドメインの購入も必要となります。

正式なサーバー証明書を使う場合はルート証明書の登録などは必要無くなります。

 

まとめ

TLSサーバー検証のためにサーバー証明書の再作成が必要なのは、iOS/iPadOSの仕様変更による問題ですが、変更から1年以上経ってもSoftEther VPN Serverは対応しませんので、今後もここで説明した対処は必要になるでしょう。

とは言えTLSサーバー検証が行えるということは、中間者攻撃(MITM)を防げるわけですから自己防衛のためにも積極的に行うべきでしょう。

(PR)

SoftEther VPN連載記事:

コメント

タイトルとURLをコピーしました