TLSプロトコル (HTTPS)
すべての 4Dサーバーは、TLS (Transport Layer Security) プロトコルを通じて、保護モードで通信する事ができます:
- Webサーバー
- アプリケーションサーバー (クライアントサーバー・デスクトップアプリケーション)
- SQLサーバー
概要
TLSプロトコル (SSLプロトコルの後継版) は 2つのアプリケーション、主に Webサーバーとブラウザー間でのデータ交換を保護するために設計されています。 このプロトコルは幅広く使用されていて、多くの Webブラウザーとの互換性があります。
ネットワークレベルにおいては、TLSプロトコルは TCP/IPレイヤー (低レベル) とHTTP高レベルプロトコルとの間に挿入されます。 TLS は主に HTTP で動作するように設計されました。
TLS を用いたネットワーク設定:
TLSプロトコルは、送信者と受信者を認証するために設計され、交換された情報の機密性と整合性を保証します:
- 認証: 送信者と受信者の ID を確認します。
- 機密性: 送信データを暗号化します。そのため第三者はメッセージを解読することができません。
- 整合性: 受信データが偶発的にまたは故意に修正されることはありません。
TLS は公開鍵暗号化技術を用います。これは、暗号化と復号化の非対称鍵のペアである公開鍵と秘密鍵に基づいています。 秘密鍵はデータを暗号化するために使用されます。 送信者 (Webサイト) は、それを誰にも渡しません。 公開鍵は情報を復号化するために使用され、証明書を通して受信者 (Webブラウザー) へ送信されます。 インターネットで TLS を使用する際、証明書は Verisign® などの認証機関を通して発行されます。 Webサイトは証明書を認証機関 から購入します。この証明書はサーバー認証を保証し、保護モードでのデータ交換を許可する公開鍵を格納しています。
暗号化メソッドと公開鍵および秘密鍵に関する詳細は、
ENCRYPT BLOB
コマンドの記述を参照してください。
最低バージョン
デフォルトで、4D でサポートされている最低限のバージョンは TLS 1.2 となります。 この値は SET DATABASE PARAMETER
コマンドで Min TLS version
セレクターを使用することで変更可能です。
接続時に受け入れる 最低TLSバージョン を定義することで、Webサーバーのセキュリティレベルを制御することができます。
証明書の取得方法
サーバーを保護モードで起動させるには、認証機関の電子証明書が必要です。 この証明書には、サイトID や、サーバーとの通信に使用する公開鍵など、様々な情報が格納されます。 そのサーバーに接続した際に、証明書がクライアント (例: Webブラウザー) へ送られます。 証明書が識別され受け入れられると、保護モードで通信が開始されます。
ブラウザーは、ルート証明書がインストールされた認証機関によって発行された証明書のみを許可します。ルート証明書がインストールされていない場合、通常警告が表示されます。
認証機関は複数の条件によって選択されます。 認証機関が一般によく知られていると、証明書は多くのブラウザーによって許可されます。ただし、費用は高くなるかもしれません。
デジタル証明書の取得:
GENERATE ENCRYPTION KEYPAIR
コマンドを使用して、秘密鍵を作成します。
セキュリティ上の理由により、秘密鍵は常に機密でなければなりません。 実際、秘密鍵は常にサーバーマシンと一緒に存在しているべきです。 Webサーバーの場合、Key.pem ファイルは Projectフォルダーに保存されていなければなりません。
-
証明書のリクエストを発行するために
GENERATE CERTIFICATE REQUEST
コマンドを使用します。 -
その証明書リクエストを選択された認証機関へ送ります。 証明書リクエストを記入する際、認証機関への問い合わせが必要となる場合があります。 認証機関は送信されてきた情報が正確なものかを確認します。 その証明書リクエストは base64 で暗号化された PKCSフォーマット (PEMフォーマット) を用いて BLOB に作成さ れます。 この原理を使用すると、テキストとしてキーをコピー&ペーストできます。キーの内容を修正せずに認証機関に提出します。 たとえば、テキストドキュメントに証明書リクエストを含んでいる BLOB を保存します (
BLOB TO DOCUMENT
コマンドを使用)。そして、コンテンツを開き、それをコピーして、認証機関へ送信するメールまたは Webフォームにペーストします。 -
証明書を取得したら、"cert.pem" という名前でテキストファイルを作成し、その証明書の内容をそのファイルへコピーします。 証明書は様々な方法で受け取ることができます (通常は Eメールまたは HTML形式で受け取ります)。 4D は証明書に関しては全プラットフォームに関連したテキストフォーマットを受け付けます (OS X、Windows、Linux、等)。 ただし、証明書は PEMフォーマット、つまり base64 で PKCSエンコードされている必要があります。
CR改行コードは、それ単体ではサポートされていません。改行コードは CRLF または LF を使用してください。
- "cert.pem" ファイルを 適切な場所 に保存します。
4Dサーバーが保護モードで動作するようになります。 証明書は 3ヶ月から1年間の間で有効です。
インストールとアクティベーション
key.pem
と cert.pem
ファイル
サーバーと一緒に TLSプロトコルを使用するには、key.pem (秘密の暗号鍵を含むドキュメント) と cert.pem (証明書を含むドキュメント) が所定の場所にインストールされていなければなりません:
- 4D (ローカル) または 4D Server では、これらのファイルは Project フォルダー の隣に配置する必要があります。
- 4D のリモートモードでは、これらのファイルはリモートマシンの 4D Client Database フォルダーに置かれなければなりません (このフォルダーの場所に関する情報は、
Get 4D Folder
コマンドの説明を参照ください)。
これらのファイルはリモートマシンに手動でコピーする必要があります。
デフォルトの key.pem と cert.pem は 4D によって提供されています。 より高レベルのセキュリティのためには、これらのファイルをご自身の証明書で置き換えることが強く推奨されます。
TLSを有効にする
key.pem と cert.pem ファイルをインストールすることにより、4Dサーバーにおける TLS の使用を可能にします。 ただし、サーバーによって受け入れられるようにするには、TLS接続を有効化しなければなりません:
- 4D Webサーバーの場合、HTTPSを有効 にする必要があります。 HSTSオプション を設定して、HTTPモードで接続しようとするブラウザーをリダイレクトすることができます。
- アプリケーションサーバーでは、ストラクチャー設定ダイアログボックスの "C/S (クライアントサーバー)" ページで クライアント-サーバー通信の暗号化 オプションを選択する必要があります。
- SQLサーバーの場合は、ストラクチャー設定ダイアログボックスの "SQL" ページで TLSを有効にする オプションを選択する必要があります。
4D Webサーバーは 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) アルゴリズムのエントリーがそのリストに含まれている必要があります。