モジュールSSL
ssl モジュールは fibjs の組み込み暗号化モジュールであり、ネットワーク接続の SSL ハイパーテキスト転送プロトコルを確立するために使用できます。このモジュールは暗号検証を提供するため、クライアントとサーバーは接続が安全であることを確認できます。
ssl モジュールには、完全な SSL クライアント/サーバー通信プロセスに使用できる複数のオブジェクトと定数が含まれています。一般的に使用されるカテゴリは次のとおりです。
- SslSocket: 基礎となるものに基づくSocketカプセル化された SSL ソケット オブジェクトを使用して、リモート サーバーとの双方向認証やその他の通信操作を実行できます。
- SslHandler: SSL プロトコル変換プロセッサ。データ ストリームを SSL ストリーム プロトコルに変換するために使用され、サーバー側サービスの構築に適しています。
- SslServer: 標準マルチファイバー SSL サーバーの構築に便利な SSL サーバー オブジェクト。
以下はssl.Server例として、sslモジュールの使用を紹介します。
ssl.ServerSSL ベースのネットワーク サービスを提供する基本的な SSL サーバーです。使用ssl.Serverこのクラスは、SSL/TLS に基づいてサーバーを迅速に作成でき、基本的に TCP/HTTP サービスのすべての機能と互換性があります。次のような特徴があります。
- 複数のドメイン名証明書、ワイルドカード、SAN 証明書、その他の機能をサポートする X.509 証明書マネージャーが付属しています。
- TCP サーバーと同じインターフェイスと使い方を持ち、上位層のコードは SSL 接続と TCP 接続の違いを気にする必要がありません。
- すべての SSL/TLS セキュリティ プロトコルは、組み込みの OpenSSL ライブラリを使用して実装されます。
- SNI、ALPNなどのプロトコル拡張機能をサポート。
簡単な例を次に示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19const ssl = require('ssl');
const http = require('http');
const crypto = require('crypto');
// read cert and key
let key = crypto.loadPKey('mycert.key');
let cert = crypto.loadCert('mycert.pem');
// create ssl server
const svr = new ssl.Server(cert, key, 8080, s => {
var data;
while (data = s.read()) {
console.log(`received data: ${data.toString()}`);
s.write(data.toString().toUpperCase());
}
});
// start server
svr.start();
上記のコードでは、最初に SSL 証明書と秘密キー ファイルを読み取り、次に SSL サーバー インスタンスを作成しました。サーバーのコールバック関数では、クライアント データを受信した後、データを大文字に変換し、書き込み関数を通じてデータをクライアントに返します。
物体
Socket
作成するSslSocketオブジェクト、参照SslSocket
1SslSocket ssl.Socket;
Handler
作成するSslHandlerオブジェクト、参照SslHandler
1SslHandler ssl.Handler;
Server
作成するSslServerオブジェクト、参照SslServer
1SslServer ssl.Server;
静的関数
connect
作成するSslSocketオブジェクトを選択して接続を確立する
1
2static Stream ssl.connect(String url,
Integer timeout = 0) async;
呼び出しパラメータ:
- url: 文字列。接続プロトコルを指定します。次のようになります: ssl://host:port
- timeout: 整数、タイムアウトを指定します。単位はミリ秒です。デフォルトは 0 です。
返される結果:
作成するSslSocketオブジェクトを選択して接続を確立する
1
2
3
4static Stream ssl.connect(String url,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
呼び出しパラメータ:
- url: 文字列。接続プロトコルを指定します。次のようになります: ssl://host:port
- crt:X509Cert、証明書。クライアントを検証するためにサーバーに送信するために使用されます。
- key:PKey、秘密キー、クライアントとの通信に使用されます
- timeout: 整数、タイムアウトを指定します。単位はミリ秒です。デフォルトは 0 です。
返される結果:
作成するSslSocketオブジェクトを選択して接続を確立する
1
2
3
4
5static Stream ssl.connect(String url,
Integer verification,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
呼び出しパラメータ:
- url: 文字列。接続プロトコルを指定します。次のようになります: ssl://host:port
- verification: 整数、証明書検証モード
- crt:X509Cert、証明書。クライアントを検証するためにサーバーに送信するために使用されます。
- key:PKey、秘密キー、クライアントとの通信に使用されます
- timeout: 整数、タイムアウトを指定します。単位はミリ秒です。デフォルトは 0 です。
返される結果:
setClientCert
デフォルトのクライアント証明書を設定する
1
2static ssl.setClientCert(X509Cert crt,
PKey key);
呼び出しパラメータ:
loadRootCerts
付属のデフォルトのルート証明書をロードします。これは以下と同等です。ssl.ca.loadRootCerts
1static ssl.loadRootCerts();
この証明書の内容は、http: //hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txtから取得されます。
静的プロパティ
ca
X509Cert、グローバル証明書、SSL クライアント モード検証サーバー証明書に使用されます。
1static readonly X509Cert ssl.ca;
verification
整数。証明書検証モードを設定します。デフォルトは VERIFY_REQUIRED です。
1static Integer ssl.verification;
絶え間ない
VERIFY_NONE
証明書検証モード、検証なし
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
証明書検証モード、オプションの検証、検証の失敗を許可
1const ssl.VERIFY_OPTIONAL = 1;
VERIFY_REQUIRED
証明書検証モード。検証が必要ですが、検証が失敗すると中断されます。
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
証明書の検証結果、証明書のタイムアウト
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
証明書の検証結果、証明書は失効しました
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
証明書の検証結果、証明書名が間違っています
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
証明書の検証結果、証明書は信頼できません
1const ssl.BADCERT_NOT_TRUSTED = 8;