TeamViewer クライアント間のすべての接続は、双方の参加者の ID を認証するために証明書を使用します。これらの証明書はTeamViewer CAによって個々のTeamViewer IDに対して発行され、これらのデバイスが別のデバイスになりすますことを防ぎます。BYOC(Bring Your Own Certificate)機能により、TeamViewerユーザーは独自の証明書を使用して、TeamViewer接続に関与するデバイスを認証することができます。これは、TeamViewer 証明書の認証とは独立しており、常に追加されます。

TeamViewer のインストールでは、着信接続、発信接続、またはその両方にカスタム証明書認証を要求するように設定できます。カスタム証明書認証が必要な場合、接続は、指定した証明局によって署名された証明書の秘密キーを相手側が持っている場合にのみ成功します。これは、TeamViewer接続を特定のデバイスに対して制限する効果的な方法です。

この記事は、すべてのTeamViewer Tensorのお客様に適用されます。

証明書

BYOC を使用するには、認証が必要なすべてのデバイスの証明書に署名する単一の認証局(CA)が必要です。他のデバイスからの証明書認証を必要とするすべてのデバイスは、CA 証明書にアクセスする必要 があります。デバイス間で自己認証を行うすべてのデバイスは、CA によって署名された証明書、一致する秘密鍵、およびすべての中間証明書(もしあれば)にアクセスできる必要があります。TeamViewerはX.509証明書をサポートしており、ファイルまたはWindows トラストストアから証明書とその秘密鍵をインポートすることができます。

Windows トラストストアの利用

Windowsトラストストアから読み込まれた証明書と秘密鍵は、機械全体のトラストストアにインストールする必要があります。このストアには、certlm.mscを使ってアクセスすることができます。

CA証明書は「信頼されたルート証明機関」ディレクトリ内にインストールされなければなりません。認証に使用される特定のCA証明書は、一意の16進コード化されたフィンガープリントによって識別されます。フィンガープリントは、目的の証明書をダブルクリックすると、「詳細」タブ内の「拇印」として表示されます。

デバイス証明書は、ローカル・コンピュータ証明書の「Personal」ディレクトリにインストールする必要があります。証明書をダブルクリックすると、小さな鍵のアイコンが表示されます。

便宜上、BYOC 機能は、ローカル端末と同じ名前のクライアント証明書を使用するように設定できます。これにより、すべての端末で同じ構成を使用することができ ます。これは、クライアント証明書を設定する推奨方法です。

証明書ファイルの使用

ファイルから読み込む証明書と秘密鍵は、DERエンコードされたバイナリのX.509か、base-64エンコードされたX.509(PEM形式)でなければなりません。PFXのような他の形式はサポートされていません。

デバイスとルートCA証明書の間に中間証明書がある場合、デバイス証明書ファイルに含める必要があります。これはPEM形式のファイルでのみサポートされています。DER形式のファイルには証明書チェーンを含めることはできません。

秘密鍵を含むファイルは、オペレーティングシステムのアクセス制御を使用して十分 に保護する必要があります。TeamViewer サービスが実行されている場合、秘密鍵にアクセスするため、Windows では SYSTEM ユーザーのアクセスのみが必要です。

構成

デフォルトでは、BYOC 機能は無効になっており、着信接続も発信接続も証明書認証を必要としません。逆に、証明書認証が必要な機械に接続することも、その機械から接続を受信することもできません。

BYOC 機能を有効にし、証明書認証を要求するには、構成文字列をTeamViewer 設定に配置する必要があります。これらはWindows レジストリ内にあります。正確な場所は、Windows とTeamViewer の 32 ビット版と 64 ビット版の組み合わせによって異なります:

BYOC 設定は「Security」サブキーの中にあります。このレジストリ キーがまだ存在しない場合は、作成する必要があります。次に、BYOC 機能を有効にするには、タイプ "String"、名前 "BYOC_Configuration" の新しい値を作成する必要があります。

この値が存在し、空でない場合、設定が有効でなくても、BYOC機能は有効です。無効な構成では、接続はできません。

PowerShellを使用して、コマンドラインからこの値を作成することができます:

New-Item -Force `
                  -Path HKLM:\SOFTWARE\TeamViewer\Security
New-ItemProperty -Force `
                                  -Path HKLM:\SOFTWARE\TeamViewer\Security `
                                  -Name BYOC_Configuration

設定自体はJSON形式を使用します。JSONは直接入力するか、レジストリエディターにコピーすることができますが、UIでは1行しか入力できないため、JSONから改行をすべて取り除く必要があります。また、レジストリキーをファイルからPowerShellで設定することもできます。設定が現在のディレクトリのTeamViewerBYOC.jsonというファイルに保存されているとすると、次のように読み込むことができます:

New-ItemProperty -Force `
                                  -Path HKLM:\SOFTWARE\TeamViewer\Security `
                                  -Name BYOC_Configuration `
                                  -Value $(Get-Content TeamViewerBYOC.json)

JSONの内容によって、証明書認証が必要なタイミングと、証明書をどこで確認できるかが決まります。以下のセクションでは、いくつかの構成例を紹介します。

Windows トラストストアの利用

証明書と秘密鍵は、マシン全体のWindowsトラストストアから読み込むことができます。正しい証明書を識別するために、TeamViewer クライアントはローカルマシンと同じ名前の証明書を検索することができます。この証明書を、本書ではホスト証明書と呼びます。

ホスト証明書を読み込むための設定は、以下のとおりです:

{
 "cert": {
  "windows": {
   "use_host_certificate": true
  }
 }
}

これにより、このデバイスの認証にはホスト証明書が使用され、他のデバイスの認証にはホスト証明書に署名したCAが使用されます。ホスト名で正しい証明書を識別することで、この構成を異なるデバイスで使用し、デバイス固有のものを使用することができます。

あるいは、CA証明書はフィンガープリントで明示的に指定することもできます:

{
 "cert": {
  "windows": {
   "use_host_certificate": true
  }
 },
 "root_ca": {
  "windows": {
   "fingerprint": "d2dcdd02666b6335736c137fbbecff84730837af"
  }
 }
}

証明書ファイルの使用

あるいは、証明書をファイルから読み込むことも可能です。クライアント証明書の場合、証明書と同じ形式(PEM または DER)を使用して、キーもファイルとして使用できるようにする必要があります。鍵にアクセスできるのは TeamViewer サービスのみで、Windows ではこのプロセスは SYSTEM ユーザーとして実行されます。秘密鍵ファイルへのアクセスを制限することを推奨します。

中間証明書がある場合は、クライアント証明書ファイルに追加する必要があります。この場合、PEMファイルを使用しなければなりません。DERファイルでは証明書チェーンを使用できません。

PEMファイルを読み込むための設定は、以下のとおりです:

{
 "cert": {
  "pem": {
   "path": "/etc/teamviewer/certs/client_chain.pem",
   "key_path": "/etc/teamviewer/certs/client.key"
  }
 },
 "root_ca": {
  "pem": {
   "path": "/etc/teamviewer/certs/ca.pem"
  }
 }
}

あるいは、バイナリのDERファイルを読み込むには、次のような方法があります:

{
 "cert": {
  "der": {
   "path": "/etc/teamviewer/certs/client.der",
   "key_path": "/etc/teamviewer/certs/client.key"
  }
 },
 "root_ca": {
  "der": {
   "path": "/etc/teamviewer/certs/ca.der"
  }
 }
}

証明書検証の無効化

デフォルトでは、着信接続と発信接続の両方で認証が必要です。これらはroot_caセクションで個別に無効にできます。

着信接続にのみ証明書を要求するには、以下をご覧ください:

{
 "cert": {
  ...
 },
 "root_ca": {
  "dont_validate_outgoing": true
 }
}

あるいは、発信接続にのみ証明書を要求することもできます:

{
 "cert": {
  ...
 },
 "root_ca": {
  "dont_validate_incoming": true
 }
}

両オプションを組み合わせることで、着信接続でも発信接続でも証明書認証 を必要としないようにすることができます。このオプションは、証明書認証を必要とする他のデバイスとクライアント自身を認証することを可能にします。

CRLを利用した証明書失効検証によるセキュリティの向上

さらに、セキュリティ強化機能により、証明書失効リスト(CRL)がサポートされている場合は、それを使用して証明書を検証することができます。デフォルトでは、CRL 検証オプションは有効になっていません。これは、既存の方法に加え、CRL(証明書失効リスト)を使用して証明書を失効させ、監視するメカニズムが用意されていることを意味します。

{ 
"cert": { 
... 
}, 
"root_ca": { 
"verify_crl": true 
} 
} 

(ここでいう発行証明書とは、RootCA 証明書あるいは IntermediateCA 証明書のことであり、連鎖的に次の証明書を発行します。例:RootCA->IntermediateCA->Client、RootCA は IntermediateCA を発行し、IntermediateCA は RootCA を発行します)

(本節でいう発行証明書とは、IntermediateCA 証明書あるいはクライアント証明書のことであり、チェー ン前の証明書から発行されます。例:RootCA->IntermediateCA->Client、IntermediateCAはRootCAから発行され、ClientはIntermediateCAから発行されます)

どの発行元証明書も、発行された証明書を理由に失効させることができ、失効した証明書のシリアル・ ナンバーとともに CRL に更新されます。

CRL は、CRL 配布ポイントとして証明書内で利用可能な URL からダウンロードさ れます。証明書は、CRL 配布ポイントにおいて複数の URL をサポートすることが許可されているため、1 つの証明書に対して複数の CRL が存在します。PEM および DER 形式の CRL に対応します。現時点では、Base CRL のみがサポートされ、Delta CRL はサポートさ れていません。 

証明書の検証はどのように行われるか

RootCA->Client または RootCA->IntermediateCA->Client の証明書チェーンでは、発行された証明書ごとに、 配布ポイント(URL/s)を介して、CRL がダウンロードされます。発行された証明書は、CRL/s と照合して検証されます。

検証が失敗した場合、つまり、以下のシナリオのいずれかに該当する場合、認証は失敗します:

  • 証明書チェーンが検証できない場合、または証明書の有効期限が切れている場合
  • URLにアクセスできない、CRL をダウンロードできない場合
  • CRLが正しいCRL形式でない場合、または空のファイルであるか、データ量(バイト)が不足している場合
  • CRLの有効期限が切れている場合
  • 証明書URLの発行元証明書によってCRLが生成されない場合
  • 発行された証明書が失効した場合

制限事項

この機能はまだ開発中であり、現時点ではいくつかの既知の制限があります:

  • 設計上、会議は BYOC 制限の対象外です。
  • この機能は現在、Windows にのみ対応しています。