From a6502f7ef008e7127f14e8385e7dc10d2339666e Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Mon, 19 Oct 2026 22:19:41 +0700 Subject: [PATCH 1/2] test: add test for tls/mtls --- CHANGELOG.md | 4 + scripts/generate-self-signed-cert.sh | 55 ++++++ tests/server.pem | 50 ------ tests/test_InfluxDBClient.py | 170 ++++++++++++++---- tests/test_data/certificates/client.crt | 20 +++ tests/test_data/certificates/client.key | 28 +++ tests/test_data/certificates/client.pem | 48 +++++ tests/test_data/certificates/influxdb.crt | 21 +++ tests/test_data/certificates/influxdb.key | 28 +++ tests/test_data/certificates/influxdb.pem | 49 +++++ tests/test_data/certificates/other-server.crt | 21 +++ tests/test_data/certificates/other-server.key | 28 +++ tests/test_data/certificates/other-server.pem | 49 +++++ 13 files changed, 491 insertions(+), 80 deletions(-) create mode 100644 scripts/generate-self-signed-cert.sh delete mode 100644 tests/server.pem create mode 100644 tests/test_data/certificates/client.crt create mode 100644 tests/test_data/certificates/client.key create mode 100644 tests/test_data/certificates/client.pem create mode 100644 tests/test_data/certificates/influxdb.crt create mode 100644 tests/test_data/certificates/influxdb.key create mode 100644 tests/test_data/certificates/influxdb.pem create mode 100644 tests/test_data/certificates/other-server.crt create mode 100644 tests/test_data/certificates/other-server.key create mode 100644 tests/test_data/certificates/other-server.pem diff --git a/CHANGELOG.md b/CHANGELOG.md index ca6775c6..9c6e7e6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## 1.51.0 [unreleased] +### Documentation + +1. [#721](https://github.com/influxdata/influxdb-client-python/pull/721): Add examples for configure TLS/mTLS for the Influxdb client. + ### Bug Fixes 1. [#706](https://github.com/influxdata/influxdb-client-python/pull/706): Use logger instead logging. diff --git a/scripts/generate-self-signed-cert.sh b/scripts/generate-self-signed-cert.sh new file mode 100644 index 00000000..cb7dc3c7 --- /dev/null +++ b/scripts/generate-self-signed-cert.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# +# The MIT License +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# + +set -e + +PKCS12_PASSWORD="changeit" +INFLUXDB_SERVER_NAME="influxdb" +OTHER_SERVER_NAME="other-server" +CERTS_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../tests/test_data/certificates" && pwd)" + +# Gen Server .crt and .key with SAN then convert to .p12 file +for SERVER_NAME in "$INFLUXDB_SERVER_NAME" "$OTHER_SERVER_NAME"; do + echo "### Generate server key and certificate for $SERVER_NAME..." + openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -nocrypt -out "$CERTS_DIR/${SERVER_NAME}.key" + + openssl req -new -x509 -key "$CERTS_DIR/${SERVER_NAME}.key" -out "$CERTS_DIR/${SERVER_NAME}.crt" -days 3650 \ + -subj "/CN=localhost/O=Development/C=US" \ + -addext "subjectAltName = DNS:localhost,IP:127.0.0.1" + + cat "$CERTS_DIR/${SERVER_NAME}.crt" "$CERTS_DIR/${SERVER_NAME}.key" > "$CERTS_DIR/${SERVER_NAME}.pem" + +# openssl pkcs12 -export -in "$CERTS_DIR/${SERVER_NAME}.crt" -inkey "$CERTS_DIR/${SERVER_NAME}.key" \ +# -out "$CERTS_DIR/${SERVER_NAME}.p12" -name "myalias" -password "pass:$PKCS12_PASSWORD" +done + +# Gen Client .crt and .key then convert to .p12 file +echo "### Generate client key..." +openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -nocrypt -out "$CERTS_DIR/client.key" +openssl req -new -x509 -key "$CERTS_DIR/client.key" -out "$CERTS_DIR/client.crt" -days 3650 \ + -subj "/CN=test-client/O=Development/C=US" + +cat "$CERTS_DIR/client.crt" "$CERTS_DIR/client.key" > "$CERTS_DIR/client.pem" + +#openssl pkcs12 -export -in "$CERTS_DIR/client.crt" -inkey "$CERTS_DIR/client.key" \ +# -out "$CERTS_DIR/client.p12" -name "myalias" -password "pass:$PKCS12_PASSWORD" diff --git a/tests/server.pem b/tests/server.pem deleted file mode 100644 index 35caad4c..00000000 --- a/tests/server.pem +++ /dev/null @@ -1,50 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDsDCCApigAwIBAgIJAJUMvag5FRxuMA0GCSqGSIb3DQEBCwUAMHUxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIDAdOZXdZb3JrMRAwDgYDVQQHDAdOZXdZb3JrMR0wGwYD -VQQKDBRJbmZsdXhEQlB5dGhvbkNsaWVudDEPMA0GA1UECwwGQ2xpZW50MRIwEAYD -VQQDDAlsb2NhbGhvc3QwHhcNMjMwNjIwMDYzOTAzWhcNMzMwNjE3MDYzOTAzWjB1 -MQswCQYDVQQGEwJVUzEQMA4GA1UECAwHTmV3WW9yazEQMA4GA1UEBwwHTmV3WW9y -azEdMBsGA1UECgwUSW5mbHV4REJQeXRob25DbGllbnQxDzANBgNVBAsMBkNsaWVu -dDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAp4ajJzE8RsHF9M7xO0CtuUD2Wm+h3jYpybfjgLpg0ZfEiAQxXul293f7 -2EUuxUHYgvTNfxpLK9OIqhUzmhdGaDsnldC2p90CJ71iDnmd9W3eGkT6WZ+zDMva -Cm93s73P4AAjbahD6509kh6DKx5L/iAve0giqYmCA00lJRX+y3QgkwK7mQ+0WGX8 -guJqec+o/UV05HAyCRBQrHOzYwTvLUo8KHnXQ2fHyKe0qzzcFDbBJ9rLC8EJZbjg -fv4EoaUd1HaVAO49NoHZyretcWQh3Ec2rIAp946aE8+ihlvE/iyotSNnnil7o+Ki -NM9zytpWJHwy+zcm/G/0Zl1bssl9vQIDAQABo0MwQTAOBgNVHQ8BAf8EBAMCA4gw -EwYDVR0lBAwwCgYIKwYBBQUHAwEwGgYDVR0RBBMwEYIJbG9jYWxob3N0hwR/AAAB -MA0GCSqGSIb3DQEBCwUAA4IBAQA5V+maIkFDI8IRELl8v0TxiGyYLopNVHabbI/+ -o52dB8jt08b3T0T0RpPdoIM3B0bKq8nELUyFdH3sJwaOWx3N39iSfU+LRitUq+Co -/Ii02kewgoWhh4ZD6E7Esme+GXeJYK2j40d+zs1r40o02LW04YP6tUucW27JaYTX -CAQRPwQJGi+b7S1T/BG2chuFwixKnjfuQWXJQXxma24UxLCTzD7PkEsGppUIrqh6 -e/H6vazFAshdcOwB+hkmmVdTS4swJ5PKhlqIzHZll3Pe61uog2amA2rTvQ8bjXne -0iuWMZMOWX4h88y/4sf3fsvjUJiJn1DL3CmIYE2S+cquy2Su ------END CERTIFICATE----- ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnhqMnMTxGwcX0 -zvE7QK25QPZab6HeNinJt+OAumDRl8SIBDFe6Xb3d/vYRS7FQdiC9M1/Gksr04iq -FTOaF0ZoOyeV0Lan3QInvWIOeZ31bd4aRPpZn7MMy9oKb3ezvc/gACNtqEPrnT2S -HoMrHkv+IC97SCKpiYIDTSUlFf7LdCCTAruZD7RYZfyC4mp5z6j9RXTkcDIJEFCs -c7NjBO8tSjwoeddDZ8fIp7SrPNwUNsEn2ssLwQlluOB+/gShpR3UdpUA7j02gdnK -t61xZCHcRzasgCn3jpoTz6KGW8T+LKi1I2eeKXuj4qI0z3PK2lYkfDL7Nyb8b/Rm -XVuyyX29AgMBAAECggEAdisOYtLkBbUhgXGHz5fr8sTUAS7FKw1hpJxFqcPOD4nS -Y28xtBVSiXTk/MSwHQw5QQaU/Zb6d0ubFv4ljAfm7hbr8U1ryjSnFIkN5c/7j+eT -x0vom9d+YQRaJQpDkVHOk98FHpCWeFhN2ggT1hJk4DirxXY4nQYV42ZDUUmWlMOM -ZT96mRpN6iTYbNt97DjVQHiY6Yg2Mgb3Pp0GpryLtxcp7ant/xCERkqxchJnJZrU -DUWybVpoZA6qnviegc5CNej0Usp5FfvjDRdZcxsL83cinp8gTCBM6yDwxo5yp07h -1ELBjqDlL/4cmzl9Cr5dGrQC0ogumQFed07He9hggQKBgQDeMA/TQ5d96WNn64cp -x/keWYARdmPkuy8mLeEBCCldUqeyEKH+MEKebrkJp++e2UZ9yHHULU0wZsjup09E -iprV2GwC5sJFDFJC9sN7UhRGTENSG3ROmxxsRQ85AuxQ8r2Kkcus/Gln7NkQIew9 -PTYChszRYhgmvd8dbQnWJR5nyQKBgQDBBRLC++K4b5Ia7ZdPoEd1p8rUdHzgEJpu -OULEw4amrZX5YCUii14G6bh86Yp1QBEPS4I33Y/WQfMTSBTWI5h4B39+bvkFyQD0 -lomt6T0I01Czg6325ifsOLCedRBJGyzKhcG2PP5d6orioT2tNx+CdabjkQqdnwiu -FEyjr7zIVQKBgEIJ+PorEeDruI8PsznY5RN/OJB4JtK6TBZF9qWO3nSNd6h2Rx+9 -Cl/6uubC0nbdT5VdOW/+Ev463qgIdIgDxmefDuOB4OYS9nRO0eVajQoj6rKB1Hz0 -n2sSz6Z7Vu/sZifEk8wTreSkwhOIcaX2BpKTrFbjmBgTwTgGy7CpkbL5AoGAJ/dm -9Ry2yz2+4PiFNiWX5lLB+s/L85E8iMouexOJVAXpYeN4jPiSlZfbbXHmC3Uikyot -YmfsGo85R6rLNbPVJDVZPtK3mW0PV5W8GFiNHMC0mxcO9GqfpZfvakAPCTQpSB3+ -CEAE42lnLJn6bV1WlurJjaFAs3Z0k6b8X4BJ9KkCgYEA0cKrgKB3GidtKBeyuGKg -Wdemq9T4c7R5swn/87Ud6UE0zALA8wBx7ZacQm9IOHiCSVdBGAEAzNd14Kri8DaK -/5EHjZ2yI5cO108IbkTZ2TXevgjAHCvrhEtcgG0SrNNFJ6JoGiSqJ8Ue5xbj3P2y -KYSFK5vRSIQ5GpR4zTXN7S4= ------END PRIVATE KEY----- diff --git a/tests/test_InfluxDBClient.py b/tests/test_InfluxDBClient.py index 1df29341..d919f19c 100644 --- a/tests/test_InfluxDBClient.py +++ b/tests/test_InfluxDBClient.py @@ -15,18 +15,43 @@ from influxdb_client import InfluxDBClient, Point from influxdb_client.client.write.retry import WritesRetry from influxdb_client.client.write_api import WriteOptions, WriteType, SYNCHRONOUS +from influxdb_client.rest import ApiException from tests.base_test import BaseTest class InfluxDBClientTest(unittest.TestCase): + cert_dir = os.path.join(os.path.dirname(__file__), "test_data", "certificates") + + influxdb_cert_pem = os.path.join(cert_dir, "influxdb.pem") + influxdb_cert = os.path.join(cert_dir, "influxdb.crt") + influxdb_key = os.path.join(cert_dir, "influxdb.key") + + client_cert_pem = os.path.join(cert_dir, "client.pem") + client_cert = os.path.join(cert_dir, "client.crt") + client_key = os.path.join(cert_dir, "client.key") + + other_server_pem = os.path.join(cert_dir, "other-server.pem") + other_server_cert = os.path.join(cert_dir, "other-server.crt") + other_server_key = os.path.join(cert_dir, "other-server.key") + + + def setUp(self) -> None: + self.client = None + def tearDown(self) -> None: if self.client: self.client.close() + self._stop_https_server() + + def _stop_https_server(self) -> None: if hasattr(self, 'httpd'): self.httpd.shutdown() + self.httpd.server_close() + delattr(self, 'httpd') if hasattr(self, 'httpd_thread'): self.httpd_thread.join() + delattr(self, 'httpd_thread') def test_default_conf(self): self.client = InfluxDBClient(url="http://localhost:8086", token="my-token", org="my-org") @@ -59,7 +84,7 @@ def test_TrailingSlashInUrl(self): self.assertEqual('http://localhost:8086', self.client.api_client.configuration.host) def test_ConnectToSelfSignedServer(self): - self._start_http_server() + self._start_https_server() self.client = InfluxDBClient(f"https://localhost:{self.httpd.server_address[1]}", token="my-token", verify_ssl=False) @@ -67,27 +92,95 @@ def test_ConnectToSelfSignedServer(self): self.assertTrue(ping) - def test_certificate_file(self): - self._start_http_server() - - self.client = InfluxDBClient(f"https://localhost:{self.httpd.server_address[1]}", - token="my-token", verify_ssl=True, - ssl_ca_cert=f'{os.path.dirname(__file__)}/server.pem') - ping = self.client.ping() - - self.assertTrue(ping) - - def test_certificate_context(self): - self._start_http_server() - - ssl_context = ssl.create_default_context(cafile=f"{os.path.dirname(__file__)}/server.pem") - - self.client = InfluxDBClient(f"https://localhost:{self.httpd.server_address[1]}", - token="my-token", verify_ssl=True, - ssl_context=ssl_context) - ping = self.client.ping() - - self.assertTrue(ping) + def test_tls_mtls(self): + test_cases = [ + { + "name": "correct self-signed certificate config from client", + "ca_certs": self.influxdb_cert, + "cert_file": None, + "key_file": None, + "is_mtls": False, + "expect_success": True + }, + { + "name": "correct .pem self-signed certificate config from client", + "ca_certs": self.influxdb_cert_pem, + "cert_file": None, + "key_file": None, + "is_mtls": False, + "expect_success": True + }, + { + "name": "incorrect self-signed certificate config from client", + "ca_certs": self.other_server_pem, + "cert_file": None, + "key_file": None, + "is_mtls": False, + "expect_success": False + }, + { + "name": "mtls correct self-signed certificate config from client", + "ca_certs": self.influxdb_cert, + "cert_file": self.client_cert, + "key_file": self.client_key, + "is_mtls": True, + "expect_success": True + }, + { + "name": "mtls correct .pem self-signed certificate config from client", + "ca_certs": self.influxdb_cert, + "cert_file": self.client_cert_pem, + "key_file": None, + "is_mtls": True, + "expect_success": True + }, + { + "name": "mtls incorrect self-signed certificate config from client", + "ca_certs": self.influxdb_cert, + "cert_file": self.other_server_cert, + "key_file": self.other_server_key, + "is_mtls": True, + "expect_success": False + } + ] + for test_case in test_cases: + with self.subTest(test_case=test_case["name"]): + client_cert = self.client_cert if test_case["is_mtls"] else None + self._start_https_server(client_cert=client_cert) + try: + self.client = InfluxDBClient(f"https://localhost:{self.httpd.server_address[1]}", + token="my-token", + verify_ssl=True, + cert_file=test_case["cert_file"], + cert_key_file=test_case["key_file"], + ssl_ca_cert=test_case["ca_certs"]) + if test_case["expect_success"]: + self.assertIsNotNone(self.client.version()) + else: + with self.assertRaises(ApiException) as exc_info: + self.client.version() + self.assertIn("SSL", exc_info.exception.reason) + finally: + if self.client: + self.client.close() + self.client = None + self._stop_https_server() + + def test_mtls_ssl_context_object(self): + self._start_https_server(client_cert=self.client_cert) + ssl_context = ssl.create_default_context(cafile=self.influxdb_cert) + ssl_context.load_cert_chain(certfile=self.client_cert, keyfile=self.client_key) + try: + self.client = InfluxDBClient(f"https://localhost:{self.httpd.server_address[1]}", + token="my-token", + verify_ssl=True, + ssl_context=ssl_context) + self.client.version() + except Exception as e: + self.fail(f"Unexpected exception: {e}") + finally: + self.client.close() + self._stop_https_server() def test_init_from_ini_file(self): self.client = InfluxDBClient.from_config_file(f'{os.path.dirname(__file__)}/config.ini') @@ -259,20 +352,37 @@ def test_init_from_env_kwargs(self): self.client = InfluxDBClient.from_env_properties(retries=retry) self.assertEqual(self.client.retries, retry) - def _start_http_server(self): + def _start_https_server(self, cert_file=None, key_file=None, client_cert=None): import http.server import ssl # Disable unverified HTTPS requests import urllib3 urllib3.disable_warnings() + if cert_file is not None and cert_file.endswith(".pem"): + if key_file is not None: + raise ValueError("Key file is not required for .pem certificate") + else: + if not cert_file: + cert_file = f'{self.cert_dir}/influxdb.crt' + if not key_file: + key_file = f'{self.cert_dir}/influxdb.key' + # Configure HTTP server - self.httpd = http.server.HTTPServer(('localhost', 0), ServerWithSelfSingedSSL) - context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - context.load_cert_chain(f'{os.path.dirname(__file__)}/server.pem') - self.httpd.socket = context.wrap_socket(self.httpd.socket, server_side=True) - # Start server at background - self.httpd_thread = threading.Thread(target=self.httpd.serve_forever) - self.httpd_thread.start() + try: + self.httpd = http.server.HTTPServer(('localhost', 0), ServerWithSelfSingedSSL) + context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + context.load_cert_chain(cert_file, key_file) + + if client_cert: + context.verify_mode = ssl.CERT_REQUIRED + context.load_verify_locations(cafile=client_cert) + + self.httpd.socket = context.wrap_socket(self.httpd.socket, server_side=True) + # Start server at background + self.httpd_thread = threading.Thread(target=self.httpd.serve_forever) + self.httpd_thread.start() + except Exception as e: + raise e def test_write_context_manager(self): diff --git a/tests/test_data/certificates/client.crt b/tests/test_data/certificates/client.crt new file mode 100644 index 00000000..801de1b6 --- /dev/null +++ b/tests/test_data/certificates/client.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIUeiLXvSUn7rJImhXlTNH8M0cnsUQwDQYJKoZIhvcNAQEL +BQAwOTEUMBIGA1UEAwwLdGVzdC1jbGllbnQxFDASBgNVBAoMC0RldmVsb3BtZW50 +MQswCQYDVQQGEwJVUzAeFw0yNjEwMjEwNzIxMzZaFw0zNjEwMTgwNzIxMzZaMDkx +FDASBgNVBAMMC3Rlc3QtY2xpZW50MRQwEgYDVQQKDAtEZXZlbG9wbWVudDELMAkG +A1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCeebeS5zss +fMskfST16LwwJFiFUaki3FujvzP2b9RXoWddeT1bUwH/xB15/q6TeeMJHaAI8kV3 +UgiJCYlYMWJL/1TEAmgpxKeR2Mlgiy1VyaBWX5I1SLVrrBJF6crqIXnrXFRQGmIc +ko63yu6dzZrfOFUVKR3BmqKMAbDjGmSatQBMM1HOEW2Yo6hreJ0nhtVgBw9CM7bm +8jSprPtoN+qy04ydPvLxIu3Ul0Ie34W6wYkKEiSYnCsaqm6LbM7Gysxq0Z8zk+ui +SId3SXJoE3aZd83fRhH4CBsE8rfeyoJKHS54TK1bglPY2WcH9nldgDeTZaiKtph3 +yjP7I0l+5uzvAgMBAAGjUzBRMB0GA1UdDgQWBBSLa0oZmPGqfYvhzkJwBO0dgsVB +zTAfBgNVHSMEGDAWgBSLa0oZmPGqfYvhzkJwBO0dgsVBzTAPBgNVHRMBAf8EBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB5sHYc3wU0BQA3bsPV0Qh0Aqh5iJOiXdWe +A2KNtEuure9Sl3LCXlEt5+Osj/TfvThOFc5/iQTa6G/n9gE6s7cvqn9IfwgLiFhh +MqvvB6WGRFQDeNdEkRuWpAGU2d4cz1MXua20HaeRI5w198Pb8c+eBwnGmDPEy2sV +QWVokosBCtsvcHMiIL6WcPeTY8D3fBQC4BIJKHMwgsjXKVC97oXIAbA/OscJvCDa +DWnesUDPIE11bouz0Rh9tc4lbIbaScZ8s6tGZUgDE1IqyaQTFiUOk2eBe0yuD+0O +PbV97177fPEWZ99Z2W1DUhoOfndZVUEmOu6qAQBlu6tLxACX0PoQ +-----END CERTIFICATE----- diff --git a/tests/test_data/certificates/client.key b/tests/test_data/certificates/client.key new file mode 100644 index 00000000..dde67ec9 --- /dev/null +++ b/tests/test_data/certificates/client.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCeebeS5zssfMsk +fST16LwwJFiFUaki3FujvzP2b9RXoWddeT1bUwH/xB15/q6TeeMJHaAI8kV3UgiJ +CYlYMWJL/1TEAmgpxKeR2Mlgiy1VyaBWX5I1SLVrrBJF6crqIXnrXFRQGmIcko63 +yu6dzZrfOFUVKR3BmqKMAbDjGmSatQBMM1HOEW2Yo6hreJ0nhtVgBw9CM7bm8jSp +rPtoN+qy04ydPvLxIu3Ul0Ie34W6wYkKEiSYnCsaqm6LbM7Gysxq0Z8zk+uiSId3 +SXJoE3aZd83fRhH4CBsE8rfeyoJKHS54TK1bglPY2WcH9nldgDeTZaiKtph3yjP7 +I0l+5uzvAgMBAAECggEAHHKkEgJhPHSwcL3oRx5+vbOgkloc3w2og6X8mXXsq8hl +CkIL0ht+BeA6HF6sDvw31biUNFbtQmSe9J6aIZNH3nWYzVDTSwAqxoMgbyy8uCQo +HKkuUVNagdgTNaqoysu0m5vo5LI/v3pNlU+f8wLoFL8DgvdtCIaOPEzHaJUhzyV7 +QaOcXwSovPuMU5lKyiAmsrliMbi0JVESiNnicAmhXT8zOxv8PpGUDkJYpPlz6nc8 +A0Evz7x5NG5ZW/fZ2AdN8CSJcvhkqFBFC2VMZ8mbN/93cgH79l0w96WpUB+7Pvho ++HBenG5Z3+e9o4uJfjaggiqmdDGuibvtBjFFApR/gQKBgQDZLu/yBOJnm/29XauR +4pNoOngsZIaBsnyYlYHIAxrx26z46g3g96G4e+gl4AR1BiW81wZeZip4gMnqtR8R +sCTExTLAUZR3P/yl1T6i8B5MlZd0u/MLXkFMRMnh8GT90gG5RQOgBnUNimN4QJ3Y +4CxCXJ0rDIiSDMCma76RmDx9bwKBgQC6zKTT6xBeSZYq9gDeaX+tBCHmrr3eSFrC +t0wV1c8HSsBWFu/CdgV/dz+lFu8nCI6OkwFDM4PbpKtC0jJ/rCOe4fwDkhYX8P3f +ndXDUEQ4Lcsv/Vqe7TlsV8Ljn4k1EnB6Fr09lE9jC98T8zjgsChYYWtPRC93kuzE +7UWvA+PIgQKBgEsMzD/u7intns5saxh7moK/Cb4VcuGowyObLoDmic4gInLVtrwR +9qGgt8U213N1D19lUr8WQQDpSF1B/52GJ/6TQolw54QZ6X2I5h86KM5AN1lQhZld +FeV8M+NOxidsBcp3DdyjvplSRDNO6P0D4meAR5OTvjHyFDSuMOlxGR4jAoGBALLK +/Vj5PQmCVYF5RQuc3t+zfN9XkdQYXQbSerjLlQTdv4qnGYV/gXOnp/tUIEO0JP7C +Jgs0W5j33BRxLHSXRuDkXFrukMcJm3VVlS0Evscmzbx5Oyuy06untJo6MRHjPFUf +PrKaKgIbcsGdo2ssMPGnDRcppGVG8+jpUjFZ/8QBAoGAANhVk8OCgXEm7HuvdhPU +wOW3HvhxKwJdEnKArWmCATSUV2QKBJgkKTkvq4QQOnAShzG8E+QxTBg6ILncX1Jb +9hB3BsIv8YM/SIyUFYG4ZwjqUb8EQjHeFnv/V5FoRwlZwdvsBg/YPoI5EpoC963L +yj9No0yPt9XY0kmMfvcECKs= +-----END PRIVATE KEY----- diff --git a/tests/test_data/certificates/client.pem b/tests/test_data/certificates/client.pem new file mode 100644 index 00000000..8d3a7421 --- /dev/null +++ b/tests/test_data/certificates/client.pem @@ -0,0 +1,48 @@ +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIUeiLXvSUn7rJImhXlTNH8M0cnsUQwDQYJKoZIhvcNAQEL +BQAwOTEUMBIGA1UEAwwLdGVzdC1jbGllbnQxFDASBgNVBAoMC0RldmVsb3BtZW50 +MQswCQYDVQQGEwJVUzAeFw0yNjEwMjEwNzIxMzZaFw0zNjEwMTgwNzIxMzZaMDkx +FDASBgNVBAMMC3Rlc3QtY2xpZW50MRQwEgYDVQQKDAtEZXZlbG9wbWVudDELMAkG +A1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCeebeS5zss +fMskfST16LwwJFiFUaki3FujvzP2b9RXoWddeT1bUwH/xB15/q6TeeMJHaAI8kV3 +UgiJCYlYMWJL/1TEAmgpxKeR2Mlgiy1VyaBWX5I1SLVrrBJF6crqIXnrXFRQGmIc +ko63yu6dzZrfOFUVKR3BmqKMAbDjGmSatQBMM1HOEW2Yo6hreJ0nhtVgBw9CM7bm +8jSprPtoN+qy04ydPvLxIu3Ul0Ie34W6wYkKEiSYnCsaqm6LbM7Gysxq0Z8zk+ui +SId3SXJoE3aZd83fRhH4CBsE8rfeyoJKHS54TK1bglPY2WcH9nldgDeTZaiKtph3 +yjP7I0l+5uzvAgMBAAGjUzBRMB0GA1UdDgQWBBSLa0oZmPGqfYvhzkJwBO0dgsVB +zTAfBgNVHSMEGDAWgBSLa0oZmPGqfYvhzkJwBO0dgsVBzTAPBgNVHRMBAf8EBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB5sHYc3wU0BQA3bsPV0Qh0Aqh5iJOiXdWe +A2KNtEuure9Sl3LCXlEt5+Osj/TfvThOFc5/iQTa6G/n9gE6s7cvqn9IfwgLiFhh +MqvvB6WGRFQDeNdEkRuWpAGU2d4cz1MXua20HaeRI5w198Pb8c+eBwnGmDPEy2sV +QWVokosBCtsvcHMiIL6WcPeTY8D3fBQC4BIJKHMwgsjXKVC97oXIAbA/OscJvCDa +DWnesUDPIE11bouz0Rh9tc4lbIbaScZ8s6tGZUgDE1IqyaQTFiUOk2eBe0yuD+0O +PbV97177fPEWZ99Z2W1DUhoOfndZVUEmOu6qAQBlu6tLxACX0PoQ +-----END CERTIFICATE----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCeebeS5zssfMsk +fST16LwwJFiFUaki3FujvzP2b9RXoWddeT1bUwH/xB15/q6TeeMJHaAI8kV3UgiJ +CYlYMWJL/1TEAmgpxKeR2Mlgiy1VyaBWX5I1SLVrrBJF6crqIXnrXFRQGmIcko63 +yu6dzZrfOFUVKR3BmqKMAbDjGmSatQBMM1HOEW2Yo6hreJ0nhtVgBw9CM7bm8jSp +rPtoN+qy04ydPvLxIu3Ul0Ie34W6wYkKEiSYnCsaqm6LbM7Gysxq0Z8zk+uiSId3 +SXJoE3aZd83fRhH4CBsE8rfeyoJKHS54TK1bglPY2WcH9nldgDeTZaiKtph3yjP7 +I0l+5uzvAgMBAAECggEAHHKkEgJhPHSwcL3oRx5+vbOgkloc3w2og6X8mXXsq8hl +CkIL0ht+BeA6HF6sDvw31biUNFbtQmSe9J6aIZNH3nWYzVDTSwAqxoMgbyy8uCQo +HKkuUVNagdgTNaqoysu0m5vo5LI/v3pNlU+f8wLoFL8DgvdtCIaOPEzHaJUhzyV7 +QaOcXwSovPuMU5lKyiAmsrliMbi0JVESiNnicAmhXT8zOxv8PpGUDkJYpPlz6nc8 +A0Evz7x5NG5ZW/fZ2AdN8CSJcvhkqFBFC2VMZ8mbN/93cgH79l0w96WpUB+7Pvho ++HBenG5Z3+e9o4uJfjaggiqmdDGuibvtBjFFApR/gQKBgQDZLu/yBOJnm/29XauR +4pNoOngsZIaBsnyYlYHIAxrx26z46g3g96G4e+gl4AR1BiW81wZeZip4gMnqtR8R +sCTExTLAUZR3P/yl1T6i8B5MlZd0u/MLXkFMRMnh8GT90gG5RQOgBnUNimN4QJ3Y +4CxCXJ0rDIiSDMCma76RmDx9bwKBgQC6zKTT6xBeSZYq9gDeaX+tBCHmrr3eSFrC +t0wV1c8HSsBWFu/CdgV/dz+lFu8nCI6OkwFDM4PbpKtC0jJ/rCOe4fwDkhYX8P3f +ndXDUEQ4Lcsv/Vqe7TlsV8Ljn4k1EnB6Fr09lE9jC98T8zjgsChYYWtPRC93kuzE +7UWvA+PIgQKBgEsMzD/u7intns5saxh7moK/Cb4VcuGowyObLoDmic4gInLVtrwR +9qGgt8U213N1D19lUr8WQQDpSF1B/52GJ/6TQolw54QZ6X2I5h86KM5AN1lQhZld +FeV8M+NOxidsBcp3DdyjvplSRDNO6P0D4meAR5OTvjHyFDSuMOlxGR4jAoGBALLK +/Vj5PQmCVYF5RQuc3t+zfN9XkdQYXQbSerjLlQTdv4qnGYV/gXOnp/tUIEO0JP7C +Jgs0W5j33BRxLHSXRuDkXFrukMcJm3VVlS0Evscmzbx5Oyuy06untJo6MRHjPFUf +PrKaKgIbcsGdo2ssMPGnDRcppGVG8+jpUjFZ/8QBAoGAANhVk8OCgXEm7HuvdhPU +wOW3HvhxKwJdEnKArWmCATSUV2QKBJgkKTkvq4QQOnAShzG8E+QxTBg6ILncX1Jb +9hB3BsIv8YM/SIyUFYG4ZwjqUb8EQjHeFnv/V5FoRwlZwdvsBg/YPoI5EpoC963L +yj9No0yPt9XY0kmMfvcECKs= +-----END PRIVATE KEY----- diff --git a/tests/test_data/certificates/influxdb.crt b/tests/test_data/certificates/influxdb.crt new file mode 100644 index 00000000..6c82009f --- /dev/null +++ b/tests/test_data/certificates/influxdb.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIUecno7yDGjhtrYfFYIpr1vF23ywEwDQYJKoZIhvcNAQEL +BQAwNzESMBAGA1UEAwwJbG9jYWxob3N0MRQwEgYDVQQKDAtEZXZlbG9wbWVudDEL +MAkGA1UEBhMCVVMwHhcNMjYxMDIxMDcyMTM1WhcNMzYxMDE4MDcyMTM1WjA3MRIw +EAYDVQQDDAlsb2NhbGhvc3QxFDASBgNVBAoMC0RldmVsb3BtZW50MQswCQYDVQQG +EwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJdqlQfcb3XPPjOh +p6eEoScfEpYnA+keLINSfVCIONStV+O0ZpqMIQB6bYu0AkftOKkWL8l8zS8YN3zX +5kr05MWTv/r6HFmHjN0crGn38C66zcqicPcKe6n+jTga2PzEb9Y/kx33LMQSIqn6 +5/kQFo12Vq/XcD0tHrxzlNs25tLPzTfsdjO7PgUdlvzixCAttl+j44NZcJuPDp5W +KKIKSVAcEBNJwoe6T8c3xZgI0zb28NQKWuoBn8AwVH3CfmLbHQi1hSDGyCL9/xiq +NAIeEXGSVNyyv+UiQHX9g3NUbj3blBYEWXpH84+xwdN1DhYFBBk+EEYcKXQNUnKl +mQQawOcCAwEAAaNvMG0wHQYDVR0OBBYEFBmGuRl+W8m1BqpDtXFdGn4Z62IUMB8G +A1UdIwQYMBaAFBmGuRl+W8m1BqpDtXFdGn4Z62IUMA8GA1UdEwEB/wQFMAMBAf8w +GgYDVR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAR +ygLaja1iKZOkixVoonjouUd9XmqnwB7Lz5yyCMBXjtZ6syi1zEIe/L/2LLWYEK3G +b8cvXNaH32modHZAeVJzv9OqQ26Wp3smjh416kZzU1YhNe7RDFH3pTvp8ZCA4Vss ++U+giFHkD0haEqUYq5g3s98oH5AXWP6+o4GuTnHTQj+AXyKFAxjtPu/YdXnN8VcB +y4S53xwQQqgBgwWEyWhgNjAjhZZtRYiVYqDyNhdJIskNrxDcsR+pdgbKcXZ4Lla/ +13vL+yTlKKOua+mByk5QFYCh4669FUCcmD0tVTDvam/N5pCZhk9Hninn221LGG8A +mwsZ5y0EhXRcJy84w8dN +-----END CERTIFICATE----- diff --git a/tests/test_data/certificates/influxdb.key b/tests/test_data/certificates/influxdb.key new file mode 100644 index 00000000..74bca17a --- /dev/null +++ b/tests/test_data/certificates/influxdb.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXapUH3G91zz4z +oaenhKEnHxKWJwPpHiyDUn1QiDjUrVfjtGaajCEAem2LtAJH7TipFi/JfM0vGDd8 +1+ZK9OTFk7/6+hxZh4zdHKxp9/Auus3KonD3Cnup/o04Gtj8xG/WP5Md9yzEEiKp ++uf5EBaNdlav13A9LR68c5TbNubSz8037HYzuz4FHZb84sQgLbZfo+ODWXCbjw6e +ViiiCklQHBATScKHuk/HN8WYCNM29vDUClrqAZ/AMFR9wn5i2x0ItYUgxsgi/f8Y +qjQCHhFxklTcsr/lIkB1/YNzVG4925QWBFl6R/OPscHTdQ4WBQQZPhBGHCl0DVJy +pZkEGsDnAgMBAAECggEALvTaqsltt3dBrvle6NB0uZElTnNi/xRgcYlPW34jQbFQ +JEl52EvEoEVXW4/DdVLX03gR8cZGS2iTLKA3xt8TY0Jisw6FZC5pPNj7jxFY5uT/ +lOuzZKlXmGxclx2cVScGF8c3dH+G3ndRUK2C6vZWSCB+2aFSKWaotYCSlTj9dDqL +H+BQ9sPUxJ4l3wfhcaB5Mh9yPyIYzTa/o0LYi3PVr2pW4v3objn2tjS22suoOK+F +xKFXNpxtDce9ymIg/boZS+rIPcFqlha8zM/4M5+yt8ZttRDRLqp/ysZ7tOjspU0F +kzpYMUUoJ8B+ESqs2CO4qwSW4QSlul9xaTgKgpWy4QKBgQDJnIMfE4SaHc3hNYt+ +KK5OsWNwt3y4JJGG54SA7OC6jPPKGiGRKddzcdNV1aZX6Ji4niKpFd0vJ4UJ58kn +n1yGZbKPtcIFoKeTBN8jY1rz3XnK/3TJFPYPYFlWeDLZidIFu0cY6q5Y+XXFkf+2 +Df5tbj3JosHBF/XLD0j7/LRRkwKBgQDAQ4yZMMeZq4T8GX6q3dQDottfuAGz/UTP +/VMxuvOh987dDrYUslmAru55ijm7ywVPycrtbu0FmpLcUcFe063cV6/SzDAizHxg +CpA0MjycmkdTjo+ohfYZVnTia647mMI6Dyoji3OYthGW9qENOfLtvz1RMs0/gsWb +iIbWood33QKBgQC2OXueRALvVY73RnFNVzGtONIbWA0nVw4d8/YknXXFx462FgZO +8ZWl57TPeSs/e6FGBNBpKbTgYQTzXgfHg1eatiK9l9fFRF8SGC4jCzNzBbSGkXya +HxMD9N7qs/up+dLVkV8Cm2N4UglryLlqcJ2NhT3dmPktMR3dKnSaJd9JdwKBgHCV +3bpDF08EYn5hy4vxFFsAveeiT9T/ZZFKLbJ8YHijLU7Dc5pRChpR1bH0YHR4oWak +qyE4iLF0X7WGZm7KFBBohLwy96kZB2gSJ3l5RYcKzOPAIp2zvHX/67g/CCs7+9iV +0r43xfxR+aDmUU72dSwFhbmLvycGxAKdAyCi0iM9AoGAMTovtWPfw4ZQ9IJKjzNh +ty4QOM8t+rurxjoRHpsdU7yiJlOr0M5lK8FKQ2S1kHWBSeW46pgc2scixEUdiK0B +KPW8k9lNAYw3lwLNEJ5fdhtzg1UpwTeWj+CV5Bo3TH08vBCg98y2UMEJRY0xEXJL +Okn6EzKVNqiz0z2FMOsImCo= +-----END PRIVATE KEY----- diff --git a/tests/test_data/certificates/influxdb.pem b/tests/test_data/certificates/influxdb.pem new file mode 100644 index 00000000..db1572a6 --- /dev/null +++ b/tests/test_data/certificates/influxdb.pem @@ -0,0 +1,49 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIUecno7yDGjhtrYfFYIpr1vF23ywEwDQYJKoZIhvcNAQEL +BQAwNzESMBAGA1UEAwwJbG9jYWxob3N0MRQwEgYDVQQKDAtEZXZlbG9wbWVudDEL +MAkGA1UEBhMCVVMwHhcNMjYxMDIxMDcyMTM1WhcNMzYxMDE4MDcyMTM1WjA3MRIw +EAYDVQQDDAlsb2NhbGhvc3QxFDASBgNVBAoMC0RldmVsb3BtZW50MQswCQYDVQQG +EwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJdqlQfcb3XPPjOh +p6eEoScfEpYnA+keLINSfVCIONStV+O0ZpqMIQB6bYu0AkftOKkWL8l8zS8YN3zX +5kr05MWTv/r6HFmHjN0crGn38C66zcqicPcKe6n+jTga2PzEb9Y/kx33LMQSIqn6 +5/kQFo12Vq/XcD0tHrxzlNs25tLPzTfsdjO7PgUdlvzixCAttl+j44NZcJuPDp5W +KKIKSVAcEBNJwoe6T8c3xZgI0zb28NQKWuoBn8AwVH3CfmLbHQi1hSDGyCL9/xiq +NAIeEXGSVNyyv+UiQHX9g3NUbj3blBYEWXpH84+xwdN1DhYFBBk+EEYcKXQNUnKl +mQQawOcCAwEAAaNvMG0wHQYDVR0OBBYEFBmGuRl+W8m1BqpDtXFdGn4Z62IUMB8G +A1UdIwQYMBaAFBmGuRl+W8m1BqpDtXFdGn4Z62IUMA8GA1UdEwEB/wQFMAMBAf8w +GgYDVR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAR +ygLaja1iKZOkixVoonjouUd9XmqnwB7Lz5yyCMBXjtZ6syi1zEIe/L/2LLWYEK3G +b8cvXNaH32modHZAeVJzv9OqQ26Wp3smjh416kZzU1YhNe7RDFH3pTvp8ZCA4Vss ++U+giFHkD0haEqUYq5g3s98oH5AXWP6+o4GuTnHTQj+AXyKFAxjtPu/YdXnN8VcB +y4S53xwQQqgBgwWEyWhgNjAjhZZtRYiVYqDyNhdJIskNrxDcsR+pdgbKcXZ4Lla/ +13vL+yTlKKOua+mByk5QFYCh4669FUCcmD0tVTDvam/N5pCZhk9Hninn221LGG8A +mwsZ5y0EhXRcJy84w8dN +-----END CERTIFICATE----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXapUH3G91zz4z +oaenhKEnHxKWJwPpHiyDUn1QiDjUrVfjtGaajCEAem2LtAJH7TipFi/JfM0vGDd8 +1+ZK9OTFk7/6+hxZh4zdHKxp9/Auus3KonD3Cnup/o04Gtj8xG/WP5Md9yzEEiKp ++uf5EBaNdlav13A9LR68c5TbNubSz8037HYzuz4FHZb84sQgLbZfo+ODWXCbjw6e +ViiiCklQHBATScKHuk/HN8WYCNM29vDUClrqAZ/AMFR9wn5i2x0ItYUgxsgi/f8Y +qjQCHhFxklTcsr/lIkB1/YNzVG4925QWBFl6R/OPscHTdQ4WBQQZPhBGHCl0DVJy +pZkEGsDnAgMBAAECggEALvTaqsltt3dBrvle6NB0uZElTnNi/xRgcYlPW34jQbFQ +JEl52EvEoEVXW4/DdVLX03gR8cZGS2iTLKA3xt8TY0Jisw6FZC5pPNj7jxFY5uT/ +lOuzZKlXmGxclx2cVScGF8c3dH+G3ndRUK2C6vZWSCB+2aFSKWaotYCSlTj9dDqL +H+BQ9sPUxJ4l3wfhcaB5Mh9yPyIYzTa/o0LYi3PVr2pW4v3objn2tjS22suoOK+F +xKFXNpxtDce9ymIg/boZS+rIPcFqlha8zM/4M5+yt8ZttRDRLqp/ysZ7tOjspU0F +kzpYMUUoJ8B+ESqs2CO4qwSW4QSlul9xaTgKgpWy4QKBgQDJnIMfE4SaHc3hNYt+ +KK5OsWNwt3y4JJGG54SA7OC6jPPKGiGRKddzcdNV1aZX6Ji4niKpFd0vJ4UJ58kn +n1yGZbKPtcIFoKeTBN8jY1rz3XnK/3TJFPYPYFlWeDLZidIFu0cY6q5Y+XXFkf+2 +Df5tbj3JosHBF/XLD0j7/LRRkwKBgQDAQ4yZMMeZq4T8GX6q3dQDottfuAGz/UTP +/VMxuvOh987dDrYUslmAru55ijm7ywVPycrtbu0FmpLcUcFe063cV6/SzDAizHxg +CpA0MjycmkdTjo+ohfYZVnTia647mMI6Dyoji3OYthGW9qENOfLtvz1RMs0/gsWb +iIbWood33QKBgQC2OXueRALvVY73RnFNVzGtONIbWA0nVw4d8/YknXXFx462FgZO +8ZWl57TPeSs/e6FGBNBpKbTgYQTzXgfHg1eatiK9l9fFRF8SGC4jCzNzBbSGkXya +HxMD9N7qs/up+dLVkV8Cm2N4UglryLlqcJ2NhT3dmPktMR3dKnSaJd9JdwKBgHCV +3bpDF08EYn5hy4vxFFsAveeiT9T/ZZFKLbJ8YHijLU7Dc5pRChpR1bH0YHR4oWak +qyE4iLF0X7WGZm7KFBBohLwy96kZB2gSJ3l5RYcKzOPAIp2zvHX/67g/CCs7+9iV +0r43xfxR+aDmUU72dSwFhbmLvycGxAKdAyCi0iM9AoGAMTovtWPfw4ZQ9IJKjzNh +ty4QOM8t+rurxjoRHpsdU7yiJlOr0M5lK8FKQ2S1kHWBSeW46pgc2scixEUdiK0B +KPW8k9lNAYw3lwLNEJ5fdhtzg1UpwTeWj+CV5Bo3TH08vBCg98y2UMEJRY0xEXJL +Okn6EzKVNqiz0z2FMOsImCo= +-----END PRIVATE KEY----- diff --git a/tests/test_data/certificates/other-server.crt b/tests/test_data/certificates/other-server.crt new file mode 100644 index 00000000..462ebefd --- /dev/null +++ b/tests/test_data/certificates/other-server.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIUF3fwxOv6S8Uj/KzNmQnM9URTAMcwDQYJKoZIhvcNAQEL +BQAwNzESMBAGA1UEAwwJbG9jYWxob3N0MRQwEgYDVQQKDAtEZXZlbG9wbWVudDEL +MAkGA1UEBhMCVVMwHhcNMjYxMDIxMDcyMTM2WhcNMzYxMDE4MDcyMTM2WjA3MRIw +EAYDVQQDDAlsb2NhbGhvc3QxFDASBgNVBAoMC0RldmVsb3BtZW50MQswCQYDVQQG +EwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANGF0jw5lrfEIbbz +qVajT1dmVyiIGIrqv7k6uGir3WSgOgIEnhaHUEYapSgfk/9lSDFs00Wjwy+sOYJY +sZDngA1sqYXe19jDTSvb5ADUuXx2jetUIXz78Ksl/fteo5gKSwRiOOZdDt9D5kG4 +4wIY/PH4b7mKrMHS1ZKjCsaSNNapkEBD5ro/hrNnMb7VQ0Fla4mf5QmiDbYWZqF3 +IdLf0cqM5oSlBRvxE3s0wdFWB4n5EvzNefJ81p4uwRgPGwzSFVsXwr4Pgqnm0Van +wDUd8jxtbhNgtgZlfEtmhpRVpxK3+tomv3OkYUcpq42lhfw2u+ZsvayXdv93I4EQ +DRfkcuECAwEAAaNvMG0wHQYDVR0OBBYEFECe4iWr50nj94twUb1YS+Ct8sWqMB8G +A1UdIwQYMBaAFECe4iWr50nj94twUb1YS+Ct8sWqMA8GA1UdEwEB/wQFMAMBAf8w +GgYDVR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQC3 +oZoBH7DJ3C84VaTcvXAwHbBsGJXiqsKcwtitShrEJj1a81JPk+lhwjTFnEQEoVN2 +iA/gn10H8wpP+jNB63ElF8xzNtvw+CxTRoosIERk148brDJsbatLDo9b36r5jyIC +mhl/aNb7LX4qDaZEj/UL0oRok67DFqbQ/d0Ot/TxQv1KDmEAIhkqXxpYwg8F6Gth ++hlRSdoI05ZRhFh4foRlNL1bueoCfRuGBYPf5ypMj822wqupTOMh/2dqZh37pLNw +VCukk6DYbK2/0gsW5Nn76R++2Zy72+LrbxtzC9L0ganLtNnH1pG7pCWVFaEN0+9A +deNH1/7FIBZ1KU738oct +-----END CERTIFICATE----- diff --git a/tests/test_data/certificates/other-server.key b/tests/test_data/certificates/other-server.key new file mode 100644 index 00000000..de90e284 --- /dev/null +++ b/tests/test_data/certificates/other-server.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDRhdI8OZa3xCG2 +86lWo09XZlcoiBiK6r+5Orhoq91koDoCBJ4Wh1BGGqUoH5P/ZUgxbNNFo8MvrDmC +WLGQ54ANbKmF3tfYw00r2+QA1Ll8do3rVCF8+/CrJf37XqOYCksEYjjmXQ7fQ+ZB +uOMCGPzx+G+5iqzB0tWSowrGkjTWqZBAQ+a6P4azZzG+1UNBZWuJn+UJog22Fmah +dyHS39HKjOaEpQUb8RN7NMHRVgeJ+RL8zXnyfNaeLsEYDxsM0hVbF8K+D4Kp5tFW +p8A1HfI8bW4TYLYGZXxLZoaUVacSt/raJr9zpGFHKauNpYX8NrvmbL2sl3b/dyOB +EA0X5HLhAgMBAAECggEADalP7HJa0++bZ9OaYoDyeZc9g/HfxnWzpjm1xXQTUu4p +lMZv97W/SQWQEujVhw0NDdVJL0dpa3sreBwdXn6MYxOx4qiFjWd/6XtZx1Ns0WM6 +MgfByTr01cv73qnXOTYj7wy9Jgls9fzLj38lJMFeriOjRpyhUrVTDKUfMj8H5/PM +itUwKPzrpTEvvMr4uYcb2vzsWxdzYflkwhVXYYg1tTBNKqxgI2RtdLO1JV1MCPnB +vclJQzZIdL/pWDYtmkWNZn68aAo7v5bzqa14Tl2vVtxjZj3k85sfOv+9fb/PjdTs +iEpbfENEbfqgASWyMVlOESsXqegyuAOvt6W955z5ewKBgQDn6aKw7wsGKaySsNMQ +tHuwrVJDbTNcXZ5itFwRtyLUnFf93MtHl7Pm2K0GbAmqyPgEHazqf/+BPt+Lo0S1 +v7VCXwqZNT19A0WBCeAkydiMfKZJ/Qz/Mzcj89CdJDXkjU5nGmEkaSAilZH/tUWE +weDX1bXRxS8lV/CmWIeRTvy6XwKBgQDnSNtcqfsZ/1mSyN8R5nTii1cBokZs9tnX +pSEgNh9ie3Vb+0LNMlRtlAMz+kjkxTXQkF2TD9PAcnz2pP7tRGBpLtNtFcHej6IW +XESlyHg6Sub8oShrI+TG6AwaNtz5MHaQxVHvb3ALTBgESL3mvtqQVZ637FQK1Fzb +wRK9YjBavwKBgA3z8ZThnPEu+rIMr3Y21aZIl0V1QXzSKSBZJ5ztPsw559VfPl+9 +UdaWvLpBL8e1ta5RtsCZGN9G0B5PoWep9BbdLv8Ow/dMhhcAaBruhffV3A9hiTGl +fDDOj4OU1SU+FzR+0s9k/8j05MbUui0FmSiDNCA909tUUic/9lAYx33TAoGANPQk +bWHpwPkK7CWblUCbkGbww8oAr+AQ3mPLYtGhe+3iX+32TH7yf6g814C9gct5V8hF +9G7SP6S24c3DJFXccRishbROkAN4y//SI9bzV/1gR4UqeOVd8wCcDMB09YTYEKts +6BIuqBeDBDAXcqZN6nAACAJO96/JlvLstHmvsocCgYB7etU3n7Fnh9TjUwu99MVz +Km8nAVK87EuDBAJjfmVXFUDMDm8xAJHvX/b/kDYwg/e/AG2UGW3+sQWtTkaD4/x7 +UdEZYIrrz9jIi7+YRRxSgy+Yk9m2L4aA/A7FVlSzZCKp9CiOzTIVM0VVT9YPS/kH +56AgfFyapZzk+KwrSPuOTQ== +-----END PRIVATE KEY----- diff --git a/tests/test_data/certificates/other-server.pem b/tests/test_data/certificates/other-server.pem new file mode 100644 index 00000000..0866ae7f --- /dev/null +++ b/tests/test_data/certificates/other-server.pem @@ -0,0 +1,49 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIUF3fwxOv6S8Uj/KzNmQnM9URTAMcwDQYJKoZIhvcNAQEL +BQAwNzESMBAGA1UEAwwJbG9jYWxob3N0MRQwEgYDVQQKDAtEZXZlbG9wbWVudDEL +MAkGA1UEBhMCVVMwHhcNMjYxMDIxMDcyMTM2WhcNMzYxMDE4MDcyMTM2WjA3MRIw +EAYDVQQDDAlsb2NhbGhvc3QxFDASBgNVBAoMC0RldmVsb3BtZW50MQswCQYDVQQG +EwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANGF0jw5lrfEIbbz +qVajT1dmVyiIGIrqv7k6uGir3WSgOgIEnhaHUEYapSgfk/9lSDFs00Wjwy+sOYJY +sZDngA1sqYXe19jDTSvb5ADUuXx2jetUIXz78Ksl/fteo5gKSwRiOOZdDt9D5kG4 +4wIY/PH4b7mKrMHS1ZKjCsaSNNapkEBD5ro/hrNnMb7VQ0Fla4mf5QmiDbYWZqF3 +IdLf0cqM5oSlBRvxE3s0wdFWB4n5EvzNefJ81p4uwRgPGwzSFVsXwr4Pgqnm0Van +wDUd8jxtbhNgtgZlfEtmhpRVpxK3+tomv3OkYUcpq42lhfw2u+ZsvayXdv93I4EQ +DRfkcuECAwEAAaNvMG0wHQYDVR0OBBYEFECe4iWr50nj94twUb1YS+Ct8sWqMB8G +A1UdIwQYMBaAFECe4iWr50nj94twUb1YS+Ct8sWqMA8GA1UdEwEB/wQFMAMBAf8w +GgYDVR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQC3 +oZoBH7DJ3C84VaTcvXAwHbBsGJXiqsKcwtitShrEJj1a81JPk+lhwjTFnEQEoVN2 +iA/gn10H8wpP+jNB63ElF8xzNtvw+CxTRoosIERk148brDJsbatLDo9b36r5jyIC +mhl/aNb7LX4qDaZEj/UL0oRok67DFqbQ/d0Ot/TxQv1KDmEAIhkqXxpYwg8F6Gth ++hlRSdoI05ZRhFh4foRlNL1bueoCfRuGBYPf5ypMj822wqupTOMh/2dqZh37pLNw +VCukk6DYbK2/0gsW5Nn76R++2Zy72+LrbxtzC9L0ganLtNnH1pG7pCWVFaEN0+9A +deNH1/7FIBZ1KU738oct +-----END CERTIFICATE----- +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDRhdI8OZa3xCG2 +86lWo09XZlcoiBiK6r+5Orhoq91koDoCBJ4Wh1BGGqUoH5P/ZUgxbNNFo8MvrDmC +WLGQ54ANbKmF3tfYw00r2+QA1Ll8do3rVCF8+/CrJf37XqOYCksEYjjmXQ7fQ+ZB +uOMCGPzx+G+5iqzB0tWSowrGkjTWqZBAQ+a6P4azZzG+1UNBZWuJn+UJog22Fmah +dyHS39HKjOaEpQUb8RN7NMHRVgeJ+RL8zXnyfNaeLsEYDxsM0hVbF8K+D4Kp5tFW +p8A1HfI8bW4TYLYGZXxLZoaUVacSt/raJr9zpGFHKauNpYX8NrvmbL2sl3b/dyOB +EA0X5HLhAgMBAAECggEADalP7HJa0++bZ9OaYoDyeZc9g/HfxnWzpjm1xXQTUu4p +lMZv97W/SQWQEujVhw0NDdVJL0dpa3sreBwdXn6MYxOx4qiFjWd/6XtZx1Ns0WM6 +MgfByTr01cv73qnXOTYj7wy9Jgls9fzLj38lJMFeriOjRpyhUrVTDKUfMj8H5/PM +itUwKPzrpTEvvMr4uYcb2vzsWxdzYflkwhVXYYg1tTBNKqxgI2RtdLO1JV1MCPnB +vclJQzZIdL/pWDYtmkWNZn68aAo7v5bzqa14Tl2vVtxjZj3k85sfOv+9fb/PjdTs +iEpbfENEbfqgASWyMVlOESsXqegyuAOvt6W955z5ewKBgQDn6aKw7wsGKaySsNMQ +tHuwrVJDbTNcXZ5itFwRtyLUnFf93MtHl7Pm2K0GbAmqyPgEHazqf/+BPt+Lo0S1 +v7VCXwqZNT19A0WBCeAkydiMfKZJ/Qz/Mzcj89CdJDXkjU5nGmEkaSAilZH/tUWE +weDX1bXRxS8lV/CmWIeRTvy6XwKBgQDnSNtcqfsZ/1mSyN8R5nTii1cBokZs9tnX +pSEgNh9ie3Vb+0LNMlRtlAMz+kjkxTXQkF2TD9PAcnz2pP7tRGBpLtNtFcHej6IW +XESlyHg6Sub8oShrI+TG6AwaNtz5MHaQxVHvb3ALTBgESL3mvtqQVZ637FQK1Fzb +wRK9YjBavwKBgA3z8ZThnPEu+rIMr3Y21aZIl0V1QXzSKSBZJ5ztPsw559VfPl+9 +UdaWvLpBL8e1ta5RtsCZGN9G0B5PoWep9BbdLv8Ow/dMhhcAaBruhffV3A9hiTGl +fDDOj4OU1SU+FzR+0s9k/8j05MbUui0FmSiDNCA909tUUic/9lAYx33TAoGANPQk +bWHpwPkK7CWblUCbkGbww8oAr+AQ3mPLYtGhe+3iX+32TH7yf6g814C9gct5V8hF +9G7SP6S24c3DJFXccRishbROkAN4y//SI9bzV/1gR4UqeOVd8wCcDMB09YTYEKts +6BIuqBeDBDAXcqZN6nAACAJO96/JlvLstHmvsocCgYB7etU3n7Fnh9TjUwu99MVz +Km8nAVK87EuDBAJjfmVXFUDMDm8xAJHvX/b/kDYwg/e/AG2UGW3+sQWtTkaD4/x7 +UdEZYIrrz9jIi7+YRRxSgy+Yk9m2L4aA/A7FVlSzZCKp9CiOzTIVM0VVT9YPS/kH +56AgfFyapZzk+KwrSPuOTQ== +-----END PRIVATE KEY----- From a6f196bc5362c951552d11dd7fab61d12af8f636 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Wed, 21 Oct 2026 14:50:13 +0700 Subject: [PATCH 2/2] chore: add example config TLS/mTLS --- examples/config_tls_mtls.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 examples/config_tls_mtls.py diff --git a/examples/config_tls_mtls.py b/examples/config_tls_mtls.py new file mode 100644 index 00000000..772100a0 --- /dev/null +++ b/examples/config_tls_mtls.py @@ -0,0 +1,36 @@ +import ssl + +from influxdb_client import InfluxDBClient + +path_client_cert_file = "path/to/cert_file.crt" +path_client_key_file = "path/to/cert_file.key" +path_client_cert_file_pem = "path/to/cert_file.pem" + +path_server_cert = "path/to/server_cert.crt" + +# Config mTLS with client send certificate to the server with separated .crt file and .key file. +# `ssl_ca_cert` is optional. +with InfluxDBClient("https://localhost:8081", + token="my-token", + verify_ssl=True, + ssl_ca_cert=path_server_cert, + cert_file=path_client_cert_file, + cert_key_file=path_client_key_file, ) as client: + client.version() + +# Config mTLS with client send a certificate to the server with both certificate and key bundled inside a .pem file. +# `ssl_ca_cert` is optional. +with InfluxDBClient("https://localhost:8081", + token="my-token", + verify_ssl=True, + ssl_ca_cert=path_server_cert, + cert_file=path_client_cert_file_pem) as client: + client.version() + +# Configure TLS with SSLContext; omit cert_file, cert_key_file and ssl_ca_cert when supplying a configured context. +ssl_context = ssl.create_default_context(cafile=path_server_cert) +with InfluxDBClient("https://localhost:8081", + token="my-token", + verify_ssl=True, + ssl_context=ssl_context) as client: + client.version()