kong.client.tls
クライアントTLS接続モジュール。
クライアントからの TLS 接続と対話するための関数のセット。
kong.client.tls.request_client_certificate([ca_certs])
クライアントとクライアント間のTLS相互認証(mTLS)を開始するために、クライアント側の証明書を提示するようにクライアントに要求します。
この関数は、クライアントに対してmTLSプロセスの起動を リクエスト するものですが、 強制 するものではありません。 クライアントがクライアント証明書を提示しなくても、TLSハンドシェイクは完了します。しかし、その場合、相互認証がないため、mTLS接続ではなくTLS接続を使用します。
クライアントがリクエストを承諾したかどうかを確認するには、後のフェーズでget_full_client_certificate_chain
を使用します。
ca_certs
引数はオプションの CA 証明書チェーンの不透明なポインターであり、parse_pem_cert または resty.opensslx509.chain によって作成できます。CA 証明書の識別名(DN)リストに関する情報がクライアントに送信されます。省略すると、DN リストはクライアントに送信されません。
フェーズ
- certificate
パラメータ
-
ca_certs (
cdata
、 オプション ): CA証明書チェーンの不透明ポインタ
戻り値
-
true|nil
: 成功した場合はtrue
を返し、失敗した場合はnil
を返します。 -
nil|err
: 成功した場合はnil
を返し、失敗した場合はエラーメッセージを返します。
使用方法
local x509_lib = require "resty.openssl.x509"
local chain_lib = require "resty.openssl.x509.chain"
local res, err
local chain = chain_lib.new()
-- err check
local x509, err = x509_lib.new(pem_cert, "PEM")
-- err check
res, err = chain:add(x509)
-- err check
-- `chain.ctx` is the raw data of the chain, i.e. `STACK_OF(X509) *`
res, err = kong.client.tls.request_client_certificate(chain.ctx)
if not res then
-- do something with err
end
kong.client.tls.disable_session_reuse()
現在のTLS接続のセッションチケットとセッションIDを無効にすることで、現在の接続のTLSセッションが再利用されないようにします。
フェーズ
- certificate
戻り値
-
true|nil
: 成功した場合はtrue
を返し、失敗した場合はnil
返します。 -
nil|err
: 成功した場合はnil
を返し、失敗した場合はエラーメッセージを返します。
使用方法
local res, err = kong.client.tls.disable_session_reuse()
if not res then
-- do something with err
end
kong.client.tls.get_full_client_certificate_chain()
クライアント証明書を先頭に、中間証明書(もしあれば)を末尾に持つ、PEM エンコードされたダウンストリームのクライアント証明書チェーンを返します。
フェーズ
- rewrite, access, balancer, header_filter, body_filter, log
戻り値
-
string|nil
:mTLSハンドシェイクが完了した場合はPEMでエンコードされた クライアント証明書を返し、エラーが発生した場合またはクライアントが証明書を提示しなかった場合はnil
を返します。 -
nil|err
: 成功した場合はnil
を返し、失敗した場合はエラーメッセージを返します。
使用方法
local cert, err = kong.client.get_full_client_certificate_chain()
if err then
-- do something with err
end
if not cert then
-- client did not complete mTLS
end
-- do something with cert
kong.client.tls.set_client_verify()
ログシリアライザーによって生成されたクライアントの検証結果を上書きします。
デフォルトでは、Kongのログシリアライザーが生成したログ内のrequest.tls.client_verify
フィールドは、
$ssl_client_verify
Nginx変数と同じです。
使用できる値は、"SUCCESS"
、"NONE"
、または "FAILED:<reason id="sl-md0000000">"
のみです。
この関数は成功しても何も返さず、失敗した場合に備えてLuaエラーをスローします。
フェーズ
- 書き換え、アクセス、バランサー
使用方法
kong.client.tls.set_client_verify("FAILED:unknown CA")