メインコンテンツまでスキップ
バージョン: 20 R5

TLSプロトコル (HTTPS)

すべての 4Dサーバーは、TLS (Transport Layer Security) プロトコルを通じて、保護モードで通信する事ができます:

  • HTTPサーバー
  • アプリケーションサーバー (クライアントサーバー・デスクトップアプリケーション)
  • SQLサーバー

さらに、4D HTTPクライアント (HTTP get コマンドなど) も TLSプロトコルもサポートしています。

概要

TLSプロトコル (SSLプロトコルの後継版) は 2つのアプリケーション、主に Webサーバーとブラウザー間でのデータ交換を保護するために設計されています。 このプロトコルは幅広く使用されていて、多くの Webブラウザーとの互換性があります。

ネットワークレベルにおいては、TLSプロトコルは TCP/IPレイヤー (低レベル) とHTTP高レベルプロトコルとの間に挿入されます。 TLS は主に HTTP で動作するように設計されました。

TLS を用いたネットワーク設定:

TLSプロトコルは、送信者と受信者を認証するために設計され、交換された情報の機密性と整合性を保証します:

  • 認証: 送信者と受信者の ID を確認します。
  • 機密性: 送信データを暗号化します。そのため第三者はメッセージを解読することができません。
  • 整合性: 受信データが偶発的にまたは故意に修正されることはありません。

TLS は公開鍵暗号化技術を用います。これは、暗号化と復号化の非対称鍵のペアである公開鍵と秘密鍵に基づいています。 秘密鍵はデータを暗号化するために使用されます。 送信者 (Webサイト) は、それを誰にも渡しません。

公開鍵は情報を復号化するために使用され、証明書 を通して受信者 (Webブラウザー) へ送信されます。 証明書は認証機関を通して発行されます。 Webサイトは証明書を認証プロバイダーから購入します。この証明書はサーバー認証を保証し、保護モードでのデータ交換を許可する公開鍵を格納しています。

ブラウザーは、ルート証明書がインストールされた認証機関によって発行された証明書のみを許可します。

最低バージョン

デフォルトで、4D のサーバーでサポートされている最低限のバージョンは TLS 1.3 です。 この値は SET DATABASE PARAMETER コマンドで Min TLS version セレクターを使用することで変更可能です。

Webサーバーオブジェクト最低TLSバージョン は個別に管理することができます。

HTTPサーバーで TLS を有効にする

4D の HTTPサーバーで TLSプロトコルを使用するには、次の手順が必要です:

  1. 証明書ファイルを取得します。
  2. 証明書ファイルを適切な場所にインストールします。
  3. TLS を有効化します。

証明書

形式

4D が管理する TLS証明書は PEM形式 でなければなりません。 証明書プロバイダーから .crt、.pfx、.p12 などのバイナリー形式の証明書が送られてきた場合、それらを使うためには PEM形式に変換する必要があります。 この変換をオンラインですることができる Webサイトがあります。

暗号化

4D は以下の標準的な暗号化形式の証明書をサポートしています:

互換性

ECDSA形式は、4D の Legacyネットワークレイヤー ではサポートされていません。

4D では、RSA証明書のリクエストに役立つ 2つのコマンドを用意しています (後述のチュートリアル参照)。

証明書ファイルのインストール

証明書ファイルには以下のものが含まれます:

  • key.pem: 秘密の暗号鍵を含むドキュメント
  • cert.pem: 証明書を含むドキュメント

key.pemcert.pem は次の場所に保存する必要があります:

  • 4D Server およびローカルモードの 4D では、Project フォルダー と同階層。
  • 4D のリモートモードでは、これらのファイルはリモートマシンの 4D Client Database フォルダーに置かれなければなりません。 このフォルダーの場所に関する情報は、Get 4D Folder コマンドの説明を参照ください。 これらのファイルはリモートマシンに手動でコピーする必要があります。

TLSを有効にする

HTTPサーバーで TLS接続を受け入れるには、HTTPS を有効化しなければなりません. HTTPサーバーで TLS を有効化する方法については、HTTPS の段落を参照ください。

4D Webサーバーは、セキュアな HTTPS接続のみを許可するとブラウザーに対して宣言するための HSTSオプション をサポートしています。

Perfect Forward Secrecy (PFS)

PFS は通信の中に新たなレイヤーのセキュリティを追加します。 事前準備された交換鍵を使用する代わりに、PFS は Diffie-Hellman (DH) アルゴリズムを用いて通信相手同士で協同的にセッションキーを作成します。 このように協同で鍵を作成することで "共有の秘密" が作成され、外部への漏洩を防ぐことができます。

サーバー上で TLS が有効化されているとき、PFS は自動的に有効されます。 dhparams.pem ファイル (サーバーの DH非公開鍵を含むドキュメント) がまだ存在していない場合、4D は 2048 の鍵サイズで自動的にそれを生成します。 このファイルの生成には数分間かかる可能性があります。 このファイルは、key.pem および cert.pem ファイルと同じ場所に置きます。

カスタムの暗号リスト を使用していて、PFS を有効化したい場合、DH あるいは ECDH (Elliptic-curve Diffie–Hellman) アルゴリズムのエントリーがそのリストに含まれている必要があります。

他のサーバーで TLS を有効にする

4Dアプリケーションサーバー (クライアントサーバーのデスクトップアプリケーション) または SQLサーバーで TLS を使用するには、TLS通信を有効にするだけで、起動時にサーバーが自動で接続を設定します。

RSA証明書の取得方法 (チュートリアル)

サーバーを保護モードで起動させるには、認証機関の電子証明書が必要です。 この証明書には、サイトID や、サーバーとの通信に使用する公開鍵など、様々な情報が格納されます。 そのサーバーに接続した際に、証明書がクライアント (例: Webブラウザー) へ送られます。 証明書が識別され受け入れられると、保護モードで通信が開始されます。

ブラウザーは、ルート証明書がインストールされた認証機関によって発行された証明書のみを許可します。ルート証明書がインストールされていない場合、通常警告が表示されます。

認証機関は複数の条件によって選択されます。 認証機関が一般によく知られていると、証明書は多くのブラウザーによって許可されます。ただし、費用は高くなるかもしれません。

デジタル証明書の取得:

  1. GENERATE ENCRYPTION KEYPAIR コマンドを使用して、秘密鍵を作成します。

警告: セキュリティ上の理由により、秘密鍵は常に機密でなければなりません。 実際、秘密鍵は常にサーバーマシンと一緒に存在しているべきです。 Webサーバーの場合、Key.pem ファイルは Projectフォルダーに保存されていなければなりません。

  1. 証明書のリクエストを発行するために GENERATE CERTIFICATE REQUEST コマンドを使用します。

  2. その証明書リクエストを選択された認証機関へ送ります。 証明書リクエストを記入する際、認証機関への問い合わせが必要となる場合があります。 認証機関は送信されてきた情報が正確なものかを確認します。 その証明書リクエストは base64 で暗号化された PKCSフォーマット (PEMフォーマット) を用いて BLOB に作成さ れます。 この原理を使用すると、テキストとしてキーをコピー&ペーストできます。キーの内容を修正せずに認証機関に提出します。 たとえば、テキストドキュメントに証明書リクエストを含んでいる BLOB を保存します (BLOB TO DOCUMENT コマンドを使用)。そして、コンテンツを開き、それをコピーして、認証機関へ送信するメールまたは Webフォームにペーストします。

  3. 証明書を取得したら、"cert.pem" という名前でテキストファイルを作成し、その証明書の内容をそのファイルへコピーします。 証明書は様々な方法で受け取ることができます (通常は Eメールまたは HTML形式で受け取ります)。 4D は証明書に関しては全プラットフォームに関連したテキストフォーマットを受け付けます (OS X、Windows、Linux、等)。 ただし、証明書は PEMフォーマットつまり base64 で PKCSエンコードされている必要があります。

CR改行コードは、それ単体ではサポートされていません。改行コードは CRLF または LF を使用してください。

  1. "cert.pem" ファイルを 適切な場所 に保存します。

4Dサーバーが保護モードで動作するようになります。 証明書は通常、3ヶ月から1年間の間で有効です。