summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2022-06-09 13:07:30 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2022-06-09 13:39:57 -0400
commit604a62f84f36ccc6fa08735ac8dce14950ef54f8 (patch)
tree827080b67484952e6b956aa72d5703fa468a7d31 /tests
parent546133b8e858e8acdb612b4f74a8299630cef38a (diff)
downloaddogpile-cache-604a62f84f36ccc6fa08735ac8dce14950ef54f8.tar.gz
move memcahced tls cert gen locally
using the scripts from https://github.com/scoriacorp/docker-tls-memcached so that we can refresh the certs locally Change-Id: I795e00c2191a1f771528518892112b74a0b8ea56
Diffstat (limited to 'tests')
-rw-r--r--tests/tls/README.rst27
-rw-r--r--tests/tls/ca-root.crt72
-rw-r--r--tests/tls/client-ca-root.crt72
-rw-r--r--tests/tls/client.crt52
-rw-r--r--tests/tls/client.key50
-rw-r--r--tests/tls/generate/Makefile85
-rw-r--r--tests/tls/generate/conf/ca-intermediate.conf20
-rw-r--r--tests/tls/generate/conf/ca-root.conf20
-rw-r--r--tests/tls/generate/conf/client-ca-root.conf20
-rw-r--r--tests/tls/generate/conf/client.conf18
-rw-r--r--tests/tls/generate/conf/server.conf21
-rwxr-xr-xtests/tls/generate/tool101
-rw-r--r--tests/tls/server.key50
-rw-r--r--tests/tls/server_chain.pem123
-rwxr-xr-xtests/tls/update.sh19
15 files changed, 521 insertions, 229 deletions
diff --git a/tests/tls/README.rst b/tests/tls/README.rst
new file mode 100644
index 0000000..7ca54d6
--- /dev/null
+++ b/tests/tls/README.rst
@@ -0,0 +1,27 @@
+=============================
+Generate memcached TLS files
+=============================
+
+Credit to https://github.com/scoriacorp/docker-tls-memcached
+
+courtesy Moisés Guimarães
+
+
+
+Instructions
+==============
+
+The certs will expire every two years.
+
+To renew::
+
+
+ $ cd tests/tls/generate
+ $ make clean
+ $ make install
+ $ git commit -a
+ $ git push
+
+
+
+
diff --git a/tests/tls/ca-root.crt b/tests/tls/ca-root.crt
index 41ac2e9..99f1b0b 100644
--- a/tests/tls/ca-root.crt
+++ b/tests/tls/ca-root.crt
@@ -1,38 +1,38 @@
-----BEGIN CERTIFICATE-----
-MIIGozCCBIugAwIBAgIJAM58RO9sXvoHMA0GCSqGSIb3DQEBCwUAMIGNMQswCQYD
-VQQGEwJDWjEaMBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJy
-bm8xGzAZBgNVBAoMElNjb3JpYSBDb3Jwb3JhdGlvbjE2MDQGA1UEAwwtU2Nvcmlh
-IENvcnBvcmF0aW9uIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTIwMDQw
-MzE0NDAzOVoXDTQwMDMyOTE0NDAzOVowgY0xCzAJBgNVBAYTAkNaMRowGAYDVQQI
-DBFKaWhvbW9yYXZza3kga3JhajENMAsGA1UEBwwEQnJubzEbMBkGA1UECgwSU2Nv
-cmlhIENvcnBvcmF0aW9uMTYwNAYDVQQDDC1TY29yaWEgQ29ycG9yYXRpb24gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDJqBOt19LipwyEq8YYnWe8SOJcDSE6fc+3gSggOSisJvDcjDZfgER2
-eJmVdDutRbbeHoCTlA57buIy+3Dr1BkHbWpNrSlcBD3fgja6BhDZiH6Cuq3BvL5b
-y2Yin96lk5JXmjNT5SP6vBmIe68lt+2BwjHgrbI6s8vOJwOy6gGZ8rVKGR6lHtbY
-S7DznswyGoDuOlzHdf/9PNfbf1Jd72qn6qpAkf7GGvzqJaxqamhtB+V4QjSuv2Ts
-em61+/7aeIN+MIF7IkiyVm+FwoVz505oAoeP8obXLFi2VKifinOrTMMMIoDd9I2m
-FHraS5OhmlD4XaGNV9YhOYYu/gFgiHkQyjGBjtH+a4pZPwi9SyhsBHDRWx8HsWZV
-6DWLjUyUhoM9yCUUYIPv+dA6zPhs5LKsmUfM5ASuhjTN/BBx+zpTUurX6Fmnz2Io
-ypfiYjGWMdrwUdMLa6pY/5RcCysJHkrVLZSQi6hiC3yPqg0TlPVYBIcGP3vbkEcU
-f7MBqdH6Tc8wdSAWSc+zgVD0ql5+TZ6MUXnL5wf2NYwuuzQDa1gT/VfjOZOjkv3H
-lPC8isg926R6XuywPL4CynrL/qn6DRwNVelp31aD95HBS6YAVhJg7S4odQHDar4P
-bA+qXqx0+syMyF9+c6liV2fmCHMKgRFFi6SfuwmpQ92gU53bFXPa1QIDAQABo4IB
-AjCB/zAdBgNVHQ4EFgQUhVz9eXfMmqIaA4m3NVpJpI1tz1AwgcIGA1UdIwSBujCB
-t4AUhVz9eXfMmqIaA4m3NVpJpI1tz1ChgZOkgZAwgY0xCzAJBgNVBAYTAkNaMRow
-GAYDVQQIDBFKaWhvbW9yYXZza3kga3JhajENMAsGA1UEBwwEQnJubzEbMBkGA1UE
-CgwSU2NvcmlhIENvcnBvcmF0aW9uMTYwNAYDVQQDDC1TY29yaWEgQ29ycG9yYXRp
-b24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCCQDOfETvbF76BzAMBgNVHRME
-BTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAHkqrlcn7pzr/
-UOsWkwtJkZaUgnejrryMsS24Oj7sWmpH23ZG//97gLibAjIhngZm3AOS4K7TVxvW
-rkirvaRq5ZbehOnMqLhEBbAjumK2RjeM8SBzRqYBsvU7iELyN/IMgsHzeul/5/0R
-vsBr0vtI6acKOAkUfMbpxN7m/gOL2CvGUmDy1NXtHWQTeDf6wxWkNGBb4E66sK66
-auSP205xxKzlMCzRaf8nfDAx7oy4zQtjJKunMtglxjrpGDCEFMixT8wqIUbf46o+
-+uK2AWqprBFL42+qGiu68gzMz1WS1iMmzbM0DUmAc3piDnBOz9YZa9iMegZekch5
-OL52DDd6tId/eWVFrj/IcHYoCg7KNHQteZ004zUInCpjAT/e78IZFxG8k0lZR1Lc
-87s8QXfhqm/GMzDIFMdZACrH8R90ubocK06iMcTahvI5EilH6LcLut28GGrRH8Og
-C0YBAPaZ5cjhflc0grSjPK1dKqj/Vre3CQH/+lJ8qTOBPurXlxFL759bsi9Auath
-GZ4bWhFTnykKCXJyzFbFgJObN/r/KrU4LI8q5MrkCseX5UTZ+P345WU6ZykjQqhJ
-GPi/z+dXZDy8TQJD8gg07t/oyFlzlaqDkJNWOvU+Bf/zSUyY+WxvGKXb2l9Gd7/s
-e2XISxvCzZK32s1mBNWSfl/tX0iw340=
+MIIGnDCCBISgAwIBAgIUFoHIqLQse8V35j6P0IQVbcMWsB4wDQYJKoZIhvcNAQEL
+BQAwgYMxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwI
+QnJvb2tseW4xFTATBgNVBAoMDHp6emNvbXB1dGluZzE3MDUGA1UEAwwuenp6Y29t
+cHV0aW5nIENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0yMjA2
+MDkxNzM5MzdaFw00MjA2MDQxNzM5MzdaMIGDMQswCQYDVQQGEwJVUzERMA8GA1UE
+CAwITmV3IFlvcmsxETAPBgNVBAcMCEJyb29rbHluMRUwEwYDVQQKDAx6enpjb21w
+dXRpbmcxNzA1BgNVBAMMLnp6emNvbXB1dGluZyBDbGllbnQgUm9vdCBDZXJ0aWZp
+Y2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO
+nW4j+A+j4uYBbAPmLHB6BGPKM4EN62OkxZar31t2whNT366sLonnHb9sRGfOXItX
+bfipS0zDxY9GYaoYb8Nv627KH6qClzj9fOnOMnF2hl0iMClWO4PKQZOoeS1Bd92X
+0ehrXcMLcwTdDbK6W8ziq9sQVr85msphTRqNLoGP/git8qxlU4UgFeisEt+Pg4rk
+ZfGsgBqWUVRXL0VwLcNWKlqUPuR1ayfIwpqj8Y1DhMYqFW0/HgkpGfIKbX6qnKa7
+RZP+xg31M1M+iGvNnTHVagZBb8iLcRk+5yuxbQ6+LW+VeU9npuG8BO9FzospSw4r
+YiZnzDRKF6mP4o9+2RHpioC4+KrrnVHZXL0Cynp9wZ3+2jgafv0pTGzG6Hl9VmzJ
+cEDsMnKEyctLxTJr+0hTPdaEYx25Hty6om9HLCGaMfd+m9D4YodO/z1HzSl2hkLW
+NRHaj5zToYXZGhlRJhEV/4h+0meTjxBIL5Bxsna4/BX7ddtwaZy+v+TavAX06nZL
+MRmeV16ocPR//YVYlSQDyeEhsQo47BsIAfIPXRumy/XqQahDYchGdlc8Tmy+09iX
+AF20UrLTMLOplVMqq3lu4fgjOeWQ84w9Z0VWUc3YMeOk6JzOTGd2laT3qFzK1W6d
+KTkeGd1Z+7JEgBfh42UO3wmFOD2RP4vYkCF/vN0JsQIDAQABo4IBBDCCAQAwHQYD
+VR0OBBYEFDdkWrDsJafBydBOCYtDbNPJg8fhMIHDBgNVHSMEgbswgbiAFDdkWrDs
+JafBydBOCYtDbNPJg8fhoYGJpIGGMIGDMQswCQYDVQQGEwJVUzERMA8GA1UECAwI
+TmV3IFlvcmsxETAPBgNVBAcMCEJyb29rbHluMRUwEwYDVQQKDAx6enpjb21wdXRp
+bmcxNzA1BgNVBAMMLnp6emNvbXB1dGluZyBDbGllbnQgUm9vdCBDZXJ0aWZpY2F0
+ZSBBdXRob3JpdHmCFBaByKi0LHvFd+Y+j9CEFW3DFrAeMAwGA1UdEwQFMAMBAf8w
+CwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQCOiT8d6eDuhLCxocQO9ybG
+HZZg37VK++q66oXpoBmNmYVKx5Mfu9/PFCs7fSSCS3UMaOeczJN8ra9FElT2ubr2
+jLQjLo+ehUr77qbtWKbLHo1hkYYEnLdPJByh6qgA7e42ruRlwSu0pfhmMcGGHynJ
+p4oXRdcEzRuPqpl8qdjWZUMbf6x9x5IK6IaWHIEn7ViSsYB3sDijDK6An/qU11mr
+WXEApDd9N4svtHC9OXwt5qkj0dyiULSulDLQG523YN12lAnZi1vMWYMCZ4LvMnAt
+oz3ap/ID7DtT6cDXu9ODc/P4eg2e4Z/iARV5Ckx1OMaNo/gTE7e2GCIvmtbJGhDq
+2vVyl6p5CI3/4MQWprJex2EpYeYsaWcFm4Y/TWI8nYzMa4KyBHFX3IimfiKU3Su7
+BECAy1TS1advKCj7xRJuJRyPtrLuFCOojWFgVda2Guyr7d13p2t7aO3G+D0fmK4g
+2uQhTpaJr5Kl9KmgFKeTCxZpnoxNszJLgIF0NBcYotO614ipk4ws8wI8lbXcddoO
+TrFAuL0ZHpOjySQ6gM9vC/uqG1MyrSWoOh3aORdmxqYGpuqPqAqkqh5RciNaS+A4
+i+OCNqFWuOTFEHBmSITwc3ZDBBkFqm6rbZiaP9ZyxyoHxpWZMrcqX5+4c8PMFeA9
+AarOppqrX32TV/XwWoOjNg==
-----END CERTIFICATE-----
diff --git a/tests/tls/client-ca-root.crt b/tests/tls/client-ca-root.crt
index 95d2f95..a352e12 100644
--- a/tests/tls/client-ca-root.crt
+++ b/tests/tls/client-ca-root.crt
@@ -1,38 +1,38 @@
-----BEGIN CERTIFICATE-----
-MIIGuTCCBKGgAwIBAgIJAL3E2gDMzhfMMA0GCSqGSIb3DQEBCwUAMIGUMQswCQYD
-VQQGEwJDWjEaMBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJy
-bm8xGzAZBgNVBAoMElNjb3JpYSBDb3Jwb3JhdGlvbjE9MDsGA1UEAww0U2Nvcmlh
-IENvcnBvcmF0aW9uIENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAe
-Fw0yMDA0MDMxNDQwNDBaFw00MDAzMjkxNDQwNDBaMIGUMQswCQYDVQQGEwJDWjEa
-MBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJybm8xGzAZBgNV
-BAoMElNjb3JpYSBDb3Jwb3JhdGlvbjE9MDsGA1UEAww0U2NvcmlhIENvcnBvcmF0
-aW9uIENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBANAe4fgUSDem9NxvC3RuN70cBaJv/rorRL8X
-mxHTAyElHJmoAdrto8DqCjLC2zLa3/V5MMg0j0mZ/3qeDiAUBKhICWQLY3ljHiHT
-YY8Zk7TQKr1olapQRA4KtZEe5rOcLsO7S0u4eh2gspA+VP+yjOCQlNY8X9YCVLb9
-tF6uvRy2m1N9LjxsDTV+XA7YJZk1TCx64p1XCbG6opcJ+TX1z5NwpBKC6jcnQSIa
-oYxFc0Tc/NNOvRT50VVj+AmnAH+zgQbBxoKmIdEP21JOJb+bB1oV9+XOFhSkUgvO
-CKW10to9Dr1TNWSjhkXiN0/c8lO9Ah1QBNDdbtn2XL6VAWBZGyPcz3hMbBpVpaD0
-ix0BJbDMFHeT7k3UTbCtRb7q3t33SlP4LSBrFUWvEwliHOYCv/mbGFPShtGkGjil
-F+IawuqYdz4cSR4Ccxv2M79j0eOrMl3GfS9jEWcOkn0mwADzHJBDjhbZkWSQ7Bhz
-yH5GhHr6XqU/+83nI3B8Cx65IaypLRJlmihSFLe+hkrIBkI/gv//PiG10tHS1GEB
-rcN3g0ItuIz+no6ju6ethBEBo38MbNDIrByJVUM3Zv98f6w4ncIt9UbynyPT4RNt
-Ds46euKdyWqQp4MDAZkJ5m8hale4oCb3Lvd9W+oxj9gAeX6NSOs6913HJvir9Uu+
-ldcGkSlBAgMBAAGjggEKMIIBBjAdBgNVHQ4EFgQUMadjZUOijMEa//u6ljOIB0tR
-CDcwgckGA1UdIwSBwTCBvoAUMadjZUOijMEa//u6ljOIB0tRCDehgZqkgZcwgZQx
-CzAJBgNVBAYTAkNaMRowGAYDVQQIDBFKaWhvbW9yYXZza3kga3JhajENMAsGA1UE
-BwwEQnJubzEbMBkGA1UECgwSU2NvcmlhIENvcnBvcmF0aW9uMT0wOwYDVQQDDDRT
-Y29yaWEgQ29ycG9yYXRpb24gQ2xpZW50IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
-aXR5ggkAvcTaAMzOF8wwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZI
-hvcNAQELBQADggIBABABLncFNn9B75aKiSpY6scXDf0fh56GYqCFOd4piW3Y/2t7
-WnRNkwQDhob4ISNeMsP0OhWo0dmHDkY73jkDZNhek2guS6GBw0uf4WAKjTFA6OZs
-XLv3cqODlojO1B1TdCDfmz25hJRBnhv9pI6akiNvWDZ6ERZxVx8YYfRsTu2gD0wq
-dhOBS/kcnaT0YnLiMUnn4c4Nyh2J++hLjJSR81/Ue7uxmgP3N8nb1xLKPCJ+wb+/
-iOMNh1kZM13SphNkufnN4t8Ulj+LqXft+oS3s1UGtVB/fp+xVvhY2s7OXjiHOKrY
-jvtdYvztzUelnPPtKNcu3A/eH+4V5k4OwXdZCjJq2pK4X+dEyMcLobRJXnPvlLbA
-saqJnFT2RJcejuxRYJp5DYvjdK/I87fk/JWgJuBChZs8FwsMtWWEdmR622EJ/AtO
-so5DF2YbRc8bKZrGsUuruk34liZVdZcmUOKTm1ugunO7b9zAPg9kmZPqed91XUnB
-9NqAe5FG+/gpgDLMQE63SZbyk70oxkrnkbRPY6cqJxkOO9FGJ/JiLKY5qlpShiTs
-1u3k8zcwLvdn7Ho41sL6Loiug8UBh74hL/qftBBv7+0U8Rv3pOteQmMq5zKvdUaK
-3DmBBshH/qECYpeMkPPopZ8rs/p34ZroKwBT3coyrY08fDg1gSFuxfN4Ashm
+MIIGnDCCBISgAwIBAgIULwc4U+OZiKVf+y94AHvMVh2sp2cwDQYJKoZIhvcNAQEL
+BQAwgYMxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwI
+QnJvb2tseW4xFTATBgNVBAoMDHp6emNvbXB1dGluZzE3MDUGA1UEAwwuenp6Y29t
+cHV0aW5nIENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0yMjA2
+MDkxNzM5MzhaFw00MjA2MDQxNzM5MzhaMIGDMQswCQYDVQQGEwJVUzERMA8GA1UE
+CAwITmV3IFlvcmsxETAPBgNVBAcMCEJyb29rbHluMRUwEwYDVQQKDAx6enpjb21w
+dXRpbmcxNzA1BgNVBAMMLnp6emNvbXB1dGluZyBDbGllbnQgUm9vdCBDZXJ0aWZp
+Y2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDb
+D5wrb6W6WW7EB3qVYaESmoiimD9aaonNfjxQzJ+WEmz8Phy0p8ysTqPqQNo+fOMU
+S5BTVQ5IzqZce06xfDF+4kSH26lJUnQ/0hnA8q/qleBY8QxYsxs9bvff4KE+tJh/
+0eXolj/LsFJya6DOvsj5nN48sHEDX5S68XQ9f7QjeOIPCj0ubNFUNAS3SORhaVwf
+a25s0r6EoVcAeLz0l+DKSBhNzBPGawkTqOEaR+0CGsUJYLDpsarAf8GT165q0+YE
+eUUL5Hgl0Z/jAFuOsxFpBRZIGQpINbxQtEgTEJ/rsUN+eIDO21pK9BUAvtk5xlgs
+HqnlmD7bSJ8JJzx8oVVPpd4Rdy1v/n2QLhEjzH/86CcJ4Ai9qsV7W73MN8MoWUDM
+gLAWWqYj/i/KGNnM7boNOUYMFs0J4JjYwXGD5VAoZGYD7fhyRdSfWySVtvvvPafW
+BpM7VXiT6GBIYu5mH/VRgZvWDqaFACSU5QQmrqS55bflCRWec3BD8dSMARb9C6OB
+jZAKgYdRnhUAXXcqHLbp+nVwMw2O2M5wB9CULTqMrCA/rQdZ3gNOvHzvDDZrOnH1
+qziGBVvV13FysOZpc/095XKQiWueSpYKnCaa97fd2MxJlIT6rMLsfXI8LWg4pFkM
+X/IFfIRfdJMLIErDx/VuyeycqB0yWYTvspaijpDgwwIDAQABo4IBBDCCAQAwHQYD
+VR0OBBYEFHWmqAh9zxIRzwQo07mtVEjwzi0UMIHDBgNVHSMEgbswgbiAFHWmqAh9
+zxIRzwQo07mtVEjwzi0UoYGJpIGGMIGDMQswCQYDVQQGEwJVUzERMA8GA1UECAwI
+TmV3IFlvcmsxETAPBgNVBAcMCEJyb29rbHluMRUwEwYDVQQKDAx6enpjb21wdXRp
+bmcxNzA1BgNVBAMMLnp6emNvbXB1dGluZyBDbGllbnQgUm9vdCBDZXJ0aWZpY2F0
+ZSBBdXRob3JpdHmCFC8HOFPjmYilX/sveAB7zFYdrKdnMAwGA1UdEwQFMAMBAf8w
+CwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQANZ/fjxl79uMJUZncHtTOy
+9mKqlIy5QKe3griJpIL38SoerMRv9yOhMN4YIN7sz6MzDAdEc2d0PrkWIPjM/6NC
+bng8ARQiR6QWe5Qd9EFy0ivInpWBSH5sj3OfQkzDmJISWFAmPUe/PI3HJJywQD1e
++hmcL1ugJmAkkut8uMmiSqMODmihoywn/KUCAiuGTYUpwtKNUk63wX7BwJaiB4pa
+uvmacM+xToaWzC1Xaa7Qd+JwQAjTc1HmPYyz3Vj7LIpm48+fBZh7YPZHCY0n4WDt
+KQA8t0QSlwqNw1GeTll2g2yFKQd5CdDAWFBnuI8fnm1X3GDynx2kcM/0M6Lm1rBh
+tZGlZL1NtE4tbm4B08SjVg/lTnjmCZT7G2nhTRm6NlGU4HSzLrJvOM4DS1tpQEEQ
+NF2zQmm7122bVZoBmpFcXhdISAGBslS7EnZpmDjUyiLoWnaGas8yjsJ6uP3mRiIN
+cs6NFNqqiNzYdmQqkE14fNfw3tK2NE11gxLT0JeLkJAXUoFubSnB0oRidwRSypHx
+ueTDrcwz9b+o1/c+f8lEstu8LURfTqLwC8cmyQ1HRzmH5DHiuY+gTgLy8kF5WWEg
+PHxzqFa1WQisxSRxaYT+CWushnee1wz88wXJnxUTsPuqtffUjBShfGzlV3CPN34A
+2hDHksVCo/H4T4IY52IzAA==
-----END CERTIFICATE-----
diff --git a/tests/tls/client.crt b/tests/tls/client.crt
index 70481fc..425f932 100644
--- a/tests/tls/client.crt
+++ b/tests/tls/client.crt
@@ -1,28 +1,28 @@
-----BEGIN CERTIFICATE-----
-MIIEyzCCArOgAwIBAgIJAPPSvsWCQbfFMA0GCSqGSIb3DQEBCwUAMIGUMQswCQYD
-VQQGEwJDWjEaMBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJy
-bm8xGzAZBgNVBAoMElNjb3JpYSBDb3Jwb3JhdGlvbjE9MDsGA1UEAww0U2Nvcmlh
-IENvcnBvcmF0aW9uIENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAe
-Fw0yMDA0MDMxNDQwNDBaFw0yMjA0MDMxNDQwNDBaMIGFMQswCQYDVQQGEwJDWjEa
-MBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJybm8xGzAZBgNV
-BAoMElNjb3JpYSBDb3Jwb3JhdGlvbjEuMCwGA1UEAwwlU2NvcmlhIENvcnBvcmF0
-aW9uIENsaWVudCBDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALAJe+CxlDH9ajw9q7rpYOaXBZ7Z2t2qmRFChR9rySQVFft2mTsyeF9W
-0zVNiR7wg1W74VvrrcQsv8OkbgEVeWt7e9lKIoIFzrQ1dJGUAs+vF4IQOKmlanWt
-jjz42fuJVlwTn71rXHCxoyqd0jCaRd7BHtf/fl7Po9WEFRjUr5O1iZWHBIwIn7q+
-edIwEUBs6qJN3vO42nqYmY7mQ/hG+vVzq7cL2WkN/EMGvj9SRVl0OMbmKnfxmUUi
-FoVnB6KiREHt4Kb/4y1plZzAmEMI2QDpPp/keLSmHw55U2waTEo+BKJ//G4dp7Rs
-K+CkdlOTIAEDM/AYvbM0/0rkPceovCMCAwEAAaMtMCswCQYDVR0TBAIwADARBglg
-hkgBhvhCAQEEBAMCB4AwCwYDVR0PBAQDAgXgMA0GCSqGSIb3DQEBCwUAA4ICAQBV
-M9wSpuC4zt5LhhXBHmxHuUVdIEIU+XXLTzMms3IC8r56rH4fFD6wfyVqvTlLVIyk
-UeX/FrZ9P1uOt1H1nDeNLlK8ihVdw+JSLplCfjX7SevD8tXdnokcl95p3RMMHjXU
-d46pY1StAU9fIm46WVsbtzfIPhejNlhn2L3DW3V2tkVXEKzdvaiFvmLWVlalxawY
-CoyDh4m9E5s6l/B9RoLCAajSGeXQxMCm2L9DwAyUJhFPQYLO4YJT1fM7cvl7Irms
-qjRAPq0rroebSP3bZDP0PXe7hwd01JcSnuLcQg6cOnsL9UOla8UpqJrMxG+rBD9o
-nnIOoFA/2pjNsa0xTarRXa7C75H0f4TWlEzhsEvlTqT1eTVu/XfUcv2r2mL+jSVW
-7iSQ37tlR8hN9L8/iYjIMlsf++3pdK1rvP0Mk8042pL8eqB+OYUQe/88KaNxTBeN
-q1sqzkXtcJk7DqTBPXfHFJgzASpy7UR56sa/P7XmqTmBrpNDMP2XUkdNoAQjGae1
-qiRmTiHP9e7d3bfWjW+odjbCxxZz5v4vfYY8FB6w2FfgLknfmnYKTOVR5ewT0d3T
-01mLiKVtNDlMNHSBsOWvv72sH8Y1viQ09AzzrsCEFmyCGvQXQ4bps0ObIAITS98f
-S1D9f+XM2TZJ/WxEB5VQP30iegfqEuKrwUTk8Lh6+g==
+MIIEszCCApugAwIBAgIUKcDJjsRTjDBbGNs/DZvCA2LtKNIwDQYJKoZIhvcNAQEL
+BQAwgYMxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwI
+QnJvb2tseW4xFTATBgNVBAoMDHp6emNvbXB1dGluZzE3MDUGA1UEAwwuenp6Y29t
+cHV0aW5nIENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0yMjA2
+MDkxNzM5MzhaFw0yNDA2MDgxNzM5MzhaMHQxCzAJBgNVBAYTAlVTMREwDwYDVQQI
+DAhOZXcgWW9yazERMA8GA1UEBwwIQnJvb2tseW4xFTATBgNVBAoMDHp6emNvbXB1
+dGluZzEoMCYGA1UEAwwfenp6Y29tcHV0aW5nIENsaWVudCBDZXJ0aWZpY2F0ZTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK5ZN8Ri6i/G5k161t5tNNoA
+IIsa346+3jA4ctKoWHvfpaW1hmUaeMKitwAMBsr1BByDMaD4JftkCQfoBFOpVwIS
+JU9octkJWSYe9GNGhkM34Rv436uvFwqfVKXjSh3lQVCR53SWVApCLpxIqArcbzdO
+kCpjnaRS8Gn6mTLR9Hsgo96ysXQJVCepHy6OdxvKegTk3ckWKufHV2mawNLOLT5s
+FU0YOBOYdcqYpgG4dvXMtdIwFIbGlu/KMuE8CdGHN/eHuGjF8uSeYR9E9IQ5h/d/
+MSERkY4Bb1xYDnOZ+2vlRTl7Hyl0F5pGTJ02liec9/pvISRepdXpEdR9pdL9XhkC
+AwEAAaMtMCswCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCB4AwCwYDVR0PBAQD
+AgXgMA0GCSqGSIb3DQEBCwUAA4ICAQAJLEaQzV4xS+7dW5ho5YCYhF8M37atkbJp
+SDQJJc6RRhSthTJ2dnn5YZL4NsY3Gq01SA1rHQGv9bHF9CpqdJzQs8dEKvlT+Nd1
+XORYXibEzD7jXRmd4waKdN5MUgKqCJcM5TErx6ruXtUrSc7jfSnXx3yUmG6XV1Oh
+IxF7AusV+y982uSZ3eSDKobZJuush0K1fTO7E0TVYYfu5mnVtoi6KSvgwaaYiMvt
+3s9WTz9VymylFQyZhi0UBoqdjIAk405Z/bQJU9bTIPuU5lfrvrLFX2obtCvzsqeN
+xTbAHKhfx8o/74P4C1zsf0Fh/hb+dQrZeu49WWuSxJ5V8ujoEhtA7FbCqUAGn6U6
+6dMcumCfa8lN2sbZT0qdV/nPiO8OdfkCGTCp7xzU75hylzadk4c/d7NuX4+8Iibc
+/f6EXgEeTfqschfKjSBmejTcwM64E+K/687y0im6+UuREiaDem5J06V48GtXBHFa
+xkkMQGu+vP9cOysIuVwuwLmNIz2Kr47UoB1+vzzzeCnLmLYKNsxEYI0V0oHHXfjQ
+OA2TXJSIQCRQJ9qLFK3v99a+ii16oBqzMfIiyX0MLRBSIfJegjg67MqUQN0SNtKq
+uAkn+uiVtC8TqRHGKUrlRx9mBT+il3KskD+U/FqfkF39D2fUMMG/qS4EWcpp+AxN
+Z1DXHXvCmA==
-----END CERTIFICATE-----
diff --git a/tests/tls/client.key b/tests/tls/client.key
index f81f757..97e68eb 100644
--- a/tests/tls/client.key
+++ b/tests/tls/client.key
@@ -1,27 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
-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
+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
-----END RSA PRIVATE KEY-----
diff --git a/tests/tls/generate/Makefile b/tests/tls/generate/Makefile
new file mode 100644
index 0000000..4acea46
--- /dev/null
+++ b/tests/tls/generate/Makefile
@@ -0,0 +1,85 @@
+# chain :: pem <= []crt
+# dhparam :: pem <= int (#bits)
+# gen-ca :: crt <= conf, key
+# gen-csr :: csr <= conf, key
+# gen-key :: key <= int (#bits)
+# gen-ecckey :: key <= string (ECC Prime)
+# self-sign :: crt <= days, hash, extensions, conf, csr, key (self)
+# sign :: crt <= days, hash, extensions, conf, csr, key (CA), crt (CA)
+
+# Note: Files and paths must not contain spaces.
+
+DOMAIN = localhost
+DEFAULT_CERT_TYPE = rsa2048
+DEFAULT_DAYS = 730
+DEFAULT_HASH = sha256
+DEST = gen/
+
+DEFAULT_CA_SIGN = 3650 $(DEFAULT_HASH) req_v3_ca
+DEFAULT_server_SIGN = $(DEFAULT_DAYS) $(DEFAULT_HASH) req_v3_usr
+
+.PHONY: all
+all: install
+
+.PHONY: clean
+clean:
+ rm -rf $(DEST)
+
+# root CA #############################
+$(DEST)ca-root.key:
+ ./tool gen-key $@ $(DOMAIN) 4096
+$(DEST)ca-root.crt: conf/ca-root.conf $(DEST)ca-root.key
+ ./tool gen-ca $@ $(DOMAIN) $^
+
+# intermediate CA #####################
+$(DEST)ca-intermediate.key:
+ ./tool gen-key $@ $(DOMAIN) 4096
+$(DEST)ca-intermediate.csr: conf/ca-intermediate.conf $(DEST)ca-intermediate.key
+ ./tool gen-csr $@ $(DOMAIN) $^
+$(DEST)ca-intermediate.crt: conf/ca-intermediate.conf $(DEST)ca-intermediate.csr $(DEST)ca-root.key $(DEST)ca-root.crt
+ ./tool sign $@ $(DOMAIN) $(DEFAULT_CA_SIGN) $^
+
+# server cert #########################
+$(DEST)server-rsa2048.key:
+ ./tool gen-key $@ $(DOMAIN) 2048
+$(DEST)server-rsa2048.csr: conf/server.conf $(DEST)server-rsa2048.key
+ ./tool gen-csr $@ $(DOMAIN) $^
+$(DEST)server-rsa2048.crt: conf/server.conf $(DEST)server-rsa2048.csr $(DEST)ca-intermediate.key $(DEST)ca-intermediate.crt
+ ./tool sign $@ $(DOMAIN) $(DEFAULT_server_SIGN) $^
+$(DEST)server-rsa2048.pem: $(DEST)server-rsa2048.crt $(DEST)ca-intermediate.crt
+ ./tool chain $@ $(DOMAIN) $^
+CHAINS += $(DEST)server-rsa2048.pem
+
+# client root CA ######################
+$(DEST)client-ca-root.key:
+ ./tool gen-key $@ $(DOMAIN) 4096
+$(DEST)client-ca-root.crt: conf/client-ca-root.conf $(DEST)client-ca-root.key
+ ./tool gen-ca $@ $(DOMAIN) $^
+
+# client cert #########################
+$(DEST)client.key:
+ ./tool gen-key $@ $(DOMAIN) 2048
+$(DEST)client.csr: conf/client.conf $(DEST)client.key
+ ./tool gen-csr $@ $(DOMAIN) $^
+$(DEST)client.crt: conf/client.conf $(DEST)client.csr $(DEST)client-ca-root.key $(DEST)client-ca-root.crt
+ ./tool sign $@ $(DOMAIN) $(DEFAULT_server_SIGN) $^
+$(DEST)client.p12: $(DEST)client.crt $(DEST)client.key
+ ./tool gen-pkcs12-p12 $@ $(DOMAIN) $^
+$(DEST)client.pem: $(DEST)client.p12
+ ./tool pkcs12-convert-p12-pem $@ $(DOMAIN) $^
+CHAINS += $(DEST)client.pem
+
+#######################################
+
+.PHONY: chains
+chains: $(CHAINS)
+
+.PHONY: install
+install: $(CHAINS)
+ cp $(DEST)client.key ../client.key
+ cp $(DEST)client.crt ../client.crt
+ cp $(DEST)client-ca-root.crt ../client-ca-root.crt
+ cp $(DEST)server-rsa2048.key ../server.key
+ cp $(DEST)server-rsa2048.pem ../server_chain.pem
+ cp $(DEST)ca-root.crt ../ca-root.crt
+
diff --git a/tests/tls/generate/conf/ca-intermediate.conf b/tests/tls/generate/conf/ca-intermediate.conf
new file mode 100644
index 0000000..32d4828
--- /dev/null
+++ b/tests/tls/generate/conf/ca-intermediate.conf
@@ -0,0 +1,20 @@
+[ req ]
+default_bits = 4096
+default_md = sha256
+distinguished_name = req_distinguished_name
+encrypt_key = no
+prompt = no
+x509_extensions = req_v3_ca
+
+[ req_distinguished_name ]
+countryName = US
+stateOrProvinceName = New York
+localityName = Brooklyn
+organizationName = zzzcomputing
+commonName = zzzcomputing Intermediate Certificate Authority
+
+[ req_v3_ca ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always,issuer:always
+basicConstraints = CA:true
+keyUsage = cRLSign, keyCertSign
diff --git a/tests/tls/generate/conf/ca-root.conf b/tests/tls/generate/conf/ca-root.conf
new file mode 100644
index 0000000..5ced01a
--- /dev/null
+++ b/tests/tls/generate/conf/ca-root.conf
@@ -0,0 +1,20 @@
+[ req ]
+default_bits = 4096
+default_md = sha256
+distinguished_name = req_distinguished_name
+encrypt_key = no
+prompt = no
+x509_extensions = req_v3_ca
+
+[ req_distinguished_name ]
+countryName = US
+stateOrProvinceName = New York
+localityName = Brooklyn
+organizationName = zzzcomputing
+commonName = zzzcomputing Client Root Certificate Authority
+
+[ req_v3_ca ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always,issuer:always
+basicConstraints = CA:true
+keyUsage = cRLSign, keyCertSign
diff --git a/tests/tls/generate/conf/client-ca-root.conf b/tests/tls/generate/conf/client-ca-root.conf
new file mode 100644
index 0000000..5ced01a
--- /dev/null
+++ b/tests/tls/generate/conf/client-ca-root.conf
@@ -0,0 +1,20 @@
+[ req ]
+default_bits = 4096
+default_md = sha256
+distinguished_name = req_distinguished_name
+encrypt_key = no
+prompt = no
+x509_extensions = req_v3_ca
+
+[ req_distinguished_name ]
+countryName = US
+stateOrProvinceName = New York
+localityName = Brooklyn
+organizationName = zzzcomputing
+commonName = zzzcomputing Client Root Certificate Authority
+
+[ req_v3_ca ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always,issuer:always
+basicConstraints = CA:true
+keyUsage = cRLSign, keyCertSign
diff --git a/tests/tls/generate/conf/client.conf b/tests/tls/generate/conf/client.conf
new file mode 100644
index 0000000..5edba51
--- /dev/null
+++ b/tests/tls/generate/conf/client.conf
@@ -0,0 +1,18 @@
+[ req ]
+default_bits = 4096
+distinguished_name = req_distinguished_name
+encrypt_key = no
+prompt = no
+req_extensions = req_v3_usr
+
+[ req_distinguished_name ]
+countryName = US
+stateOrProvinceName = New York
+localityName = Brooklyn
+organizationName = zzzcomputing
+commonName = zzzcomputing Client Certificate
+
+[ req_v3_usr ]
+basicConstraints = CA:FALSE
+nsCertType = client
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
diff --git a/tests/tls/generate/conf/server.conf b/tests/tls/generate/conf/server.conf
new file mode 100644
index 0000000..0a18302
--- /dev/null
+++ b/tests/tls/generate/conf/server.conf
@@ -0,0 +1,21 @@
+[ req ]
+default_bits = 2048
+distinguished_name = req_distinguished_name
+encrypt_key = no
+prompt = no
+req_extensions = req_v3_usr
+
+[ req_distinguished_name ]
+countryName = US
+stateOrProvinceName = New York
+localityName = Brooklyn
+organizationName = zzzcomputing
+commonName = *.__DOMAIN__
+
+[ req_v3_usr ]
+basicConstraints = CA:FALSE
+subjectAltName = @alt_names
+
+[ alt_names ]
+DNS.1 = *.__DOMAIN__
+DNS.2 = __DOMAIN__
diff --git a/tests/tls/generate/tool b/tests/tls/generate/tool
new file mode 100755
index 0000000..e10ba4d
--- /dev/null
+++ b/tests/tls/generate/tool
@@ -0,0 +1,101 @@
+#!/usr/bin/env bash
+set -eu
+
+COMMAND=$1
+shift
+OUT=$1
+shift
+DOMAIN=$1
+shift
+
+mkdir -p $(dirname $OUT)
+PREGEN_OUT=$(echo "$OUT" | sed "s#/gen/#/pregen/#")
+if [ -e $PREGEN_OUT ]
+then
+ cp $PREGEN_OUT $OUT
+ exit 0
+fi
+
+case "$COMMAND" in
+chain)
+ cat $@ > $OUT
+ ;;
+dhparam)
+ openssl dhparam \
+ -out $OUT \
+ $1
+ ;;
+gen-csr)
+ openssl req -new \
+ -out $OUT \
+ -config <(cat $1 | sed "s/__DOMAIN__/$DOMAIN/g") \
+ -key $2
+ ;;
+gen-csr-no-subject)
+ openssl req -new \
+ -subj / \
+ -out $OUT \
+ -config <(cat $1 | sed "s/__DOMAIN__/$DOMAIN/g") \
+ -key $2
+ ;;
+gen-ca)
+ openssl req -new -x509 -days 7300 \
+ -out $OUT \
+ -config $1 \
+ -key $2
+ ;;
+gen-key)
+ openssl genrsa \
+ -out $OUT \
+ $1
+ ;;
+gen-ecckey)
+ openssl ecparam \
+ -out $OUT \
+ -name $1 \
+ -genkey
+ ;;
+gen-pkcs12-p12)
+ openssl pkcs12 \
+ -out $OUT \
+ -export \
+ -clcerts \
+ -passout "pass:$DOMAIN" \
+ -in $1 \
+ -inkey $2
+ ;;
+pkcs12-convert-p12-pem)
+ openssl pkcs12 \
+ -out $OUT \
+ -clcerts \
+ -passin "pass:$DOMAIN" \
+ -passout "pass:$DOMAIN" \
+ -in $1
+ ;;
+self-sign)
+ openssl x509 -req -CAcreateserial \
+ -out $OUT \
+ -days $1 \
+ -$2 \
+ -extensions $3 \
+ -extfile <(cat $4 | sed "s/__DOMAIN__/$DOMAIN/g") \
+ -in $5 \
+ -signkey $6
+ ;;
+sign)
+ openssl x509 \
+ -req \
+ -CAcreateserial \
+ -days $1 \
+ -$2 \
+ -out $OUT \
+ -extensions $3 \
+ -extfile <(cat $4 | sed "s/__DOMAIN__/$DOMAIN/g") \
+ -in $5 \
+ -CAkey $6 \
+ -CA $7
+ ;;
+*)
+ echo "Unknown command."
+ exit 1
+esac
diff --git a/tests/tls/server.key b/tests/tls/server.key
index 16b7852..53308e1 100644
--- a/tests/tls/server.key
+++ b/tests/tls/server.key
@@ -1,27 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
-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
+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
-----END RSA PRIVATE KEY-----
diff --git a/tests/tls/server_chain.pem b/tests/tls/server_chain.pem
index 259fad7..dbc6a49 100644
--- a/tests/tls/server_chain.pem
+++ b/tests/tls/server_chain.pem
@@ -1,66 +1,65 @@
-----BEGIN CERTIFICATE-----
-MIIEtDCCApygAwIBAgIJAInDKKlH1oebMA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD
-VQQGEwJDWjEaMBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJy
-bm8xGzAZBgNVBAoMElNjb3JpYSBDb3Jwb3JhdGlvbjE+MDwGA1UEAww1U2Nvcmlh
-IENvcnBvcmF0aW9uIEludGVybWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-HhcNMjAwNDAzMTQ0MDM5WhcNMjIwNDAzMTQ0MDM5WjBrMQswCQYDVQQGEwJDWjEa
-MBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJybm8xGzAZBgNV
-BAoMElNjb3JpYSBDb3Jwb3JhdGlvbjEUMBIGA1UEAwwLKi5sb2NhbGhvc3QwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTnZwV9+vUkTJFSLkyjJocI+XF
-IwJIUE00UmP7mXW2ZJ/Ih7Urq33D6yjKdVMPPomibCPpjWuPYBQanoueOt7yVdTU
-sSH41nvGSRhY5MP4j3e/BohB5UdBGZkptBMr7VcCS4ez3IrqnSJ9yWPA7rJ8QT48
-JM4kZy7KM96PeFvVFAzQKTJrgz9Ag4vrBy+tx55kh/I3enGXmcw2kyqUlWEYwOwv
-/SVGWzL3YbNx1UjUYmZgGqH2OfmAs1hxe009Nc3YFbTaXgaVDxqTUmwuvm/Q58Mm
-oCOMHhOPwpqiWP62RL7T1BrKdOPYOC/YcM2k7LO9/FdpZT9zUG266FZ00tctAgMB
-AAGjMDAuMAkGA1UdEwQCMAAwIQYDVR0RBBowGIILKi5sb2NhbGhvc3SCCWxvY2Fs
-aG9zdDANBgkqhkiG9w0BAQsFAAOCAgEAfSD5SawR6hN5IJTu+ddZ0yDhC2EUSHGR
-EDRNsFfV0UDX39LycWlV/Xhi76snh08CsosyfCD0M3yXNSLl5OzNtgL673ENPMmL
-81EhGhTYjrLa5YrzupSFkRZZJ3tMvaq/3pvyMGCmcKpbjaTIUv2R9qCyk3JAIGws
-AnH226yQI/7QqEUnwN3GUiVO3MabS/dzkz1KJGdycvamdspeWw6oAt8uwlBMt4+2
-x5Mbhh7v4DIrKWx3mcv7GPWOGJTQmNJtU8Nx4ro79boB+5hSLfwLLVciaRh8tt0z
-rgNIo94TI3E9otfm6uMokFWmCSwlqGVZu70Ew3gUY6GRD3ectIvJZwHukGVP7Drv
-BJh7X6NgTQzXj826h0a4QBzJrRMimhWEY6Y/wS+2lkd3jIpWl8dhKiMMu69EBhUD
-xf7HOijghXDhuNm/n+sO1Kb0LBRwuacjVSa/v0hKAHBJaABoSr8hW0+7GJy3qX/4
-glZ+WBx5I3zXWpu7F2aSbbTL8CcosUBvUD1d3wxAMRD58bRwBJGhgKzR/ofPTl2J
-yx/p12PXGI85C/yn3EF73yQyMtsiUkOh3+158Ko2xVJTcQwnVdcqOS0NxpM9WFaW
-c4Wt2NXBlhWTpcHChpcwaxb7btQrIbw/F4HmQRAjrsjXqwBn9bhN6o5gbU5WWUwT
-L0bnjB5GS0U=
+MIIEozCCAougAwIBAgIUQBLpJT4SYzqecClHWJ+V45q0KCQwDQYJKoZIhvcNAQEL
+BQAwgYQxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwI
+QnJvb2tseW4xFTATBgNVBAoMDHp6emNvbXB1dGluZzE4MDYGA1UEAwwvenp6Y29t
+cHV0aW5nIEludGVybWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMjIw
+NjA5MTczOTM3WhcNMjQwNjA4MTczOTM3WjBgMQswCQYDVQQGEwJVUzERMA8GA1UE
+CAwITmV3IFlvcmsxETAPBgNVBAcMCEJyb29rbHluMRUwEwYDVQQKDAx6enpjb21w
+dXRpbmcxFDASBgNVBAMMCyoubG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAuLEUVXSuFiIrW1PCnIphtW0jOQjr3QRp5DSbtEYWtxR4Sj9j
+bHrykjtvrEoUnoGlpPe/nnXCZDeLpQR7iPx/XeXuRMo7iQki3f6HX8dYU8ZYHSLZ
+9IB5P1DiyEmvsRzydAUbvjS6/Hu/+wjZXtVo4XWwrjHZxiqfYLw1bMLTNKLvy+Fc
+qpmVji16G6jKQunecInU2bQ1lxYulnGswCoKcyq7L3FJuVtNqmyRe3slVRXE/I2C
+8TX1kpK2uJG7Zjpiiy9NHGCTULLp0Y+SS1quiXTlqvT4N39GN1YJh9mYvawUaRC/
+Y9Rc2zLUe4I93FLaiQ9xDMvXTHbeY8d72X4AXQIDAQABozAwLjAJBgNVHRMEAjAA
+MCEGA1UdEQQaMBiCCyoubG9jYWxob3N0gglsb2NhbGhvc3QwDQYJKoZIhvcNAQEL
+BQADggIBAFmP5HiBpl/M7DG3yDiELnsUbdl5nAbaw/fMN/oBpPF2UKh+Y/4o6YSx
+7FaIk3K6S5k5kgVQwCLQU0WXKBYoY8qzCW0nIOznTtspYBV9eM5X77wjnWQC5IwK
+y508HC/4OfByiaJY4HzDbK6lKZt9wBv4WWyfAn7PWGET1YoyoylxgkvdYCAV5gbr
+sA9lq86/G+wQ5ins8HLll7k6yZ+ok7jJNygEGE/jrxDcYugczEy6rNLf+G2lkdbi
+p1kLxqhhzPn5ejuxZz7nvefeXTi/vP/oK2CB9p/ZWvNVnmoRU8wToetm7Lmiipw8
+aKXEYED4xpyFuu0ek+5HHk6e4wbK52Uxdn1gY+sESMwP/Lwx/TpRRtbvciRaxN3i
+lR3k7gCpVWTjBfhFWaogQdVRn9/o3SQ+XcMG2QrLdoe9EAEHE84u6EMvhu4wWSiN
+4lylLLj09au2vz75C9rhvVqsUQNzh1pi+YpBGaeyNgNQdF3r6Hpu0eXdR7o6X9De
+Dm/msAhnAFD31JRaDaXluQeEUrd0WA4cduvmPbqoSIebmsdXzn1HBL8LjEJsYT9z
+ubrNq5RrR1h6d5dn8oA5S0UDvmgjCJIIOVVH0BKmAMg+gwOan2J7/t/tIFRE9UAR
+QKERKP3gCFyjhNtBK8na1F6R98vLDJwJSYTlv9dSWzGNaX1D5Cre
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIGqzCCBJOgAwIBAgIJAPwK/9rWwT83MA0GCSqGSIb3DQEBCwUAMIGNMQswCQYD
-VQQGEwJDWjEaMBgGA1UECAwRSmlob21vcmF2c2t5IGtyYWoxDTALBgNVBAcMBEJy
-bm8xGzAZBgNVBAoMElNjb3JpYSBDb3Jwb3JhdGlvbjE2MDQGA1UEAwwtU2Nvcmlh
-IENvcnBvcmF0aW9uIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTIwMDQw
-MzE0NDAzOVoXDTMwMDQwMTE0NDAzOVowgZUxCzAJBgNVBAYTAkNaMRowGAYDVQQI
-DBFKaWhvbW9yYXZza3kga3JhajENMAsGA1UEBwwEQnJubzEbMBkGA1UECgwSU2Nv
-cmlhIENvcnBvcmF0aW9uMT4wPAYDVQQDDDVTY29yaWEgQ29ycG9yYXRpb24gSW50
-ZXJtZWRpYXRlIENlcnRpZmljYXRlIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAMZWxzstRzCkLe6GwE7nnm1Rrn6JJYYWo6VhW4+zPsE7
-simraHlIZD3KtGSQUvdTI6LMdKOZk6LXuQcJAtDpYiFBQ6uEN0ckz1e2BY4V4fze
-9+7GX1+zrh3Gdoi9qf0iKYzCX+uyk5+VOrbBZ5Vqodd/Tk/dg4WWhkeocgIxxKK0
-0A+2bMHxGZAImMnBXWDt+I9FJv6/N0dHhJsVt8FQd5rC6Uf58VBh6MZOPq7aHHsM
-NjjNDT0XjOiDmFUNvizncXwHBP/2w0CBflsaU0ehW9I0yLApqrUumF1YqlgIg57h
-IsoER97caGjPVqo9/bNDraJ5XdLymM0VNzJZ3AxIpot7NqCRoJWlJiJf1n/7tzva
-eVOTLWaEAXgxuYpRuXIebRZUJMUOOLDZHxAfUxgRBOyFutgOyEPc0tbcvQ/P/FWk
-ZaGDXjQaivGh7lfs1r7LXj5FueePAvf6G99xccAvfHYsy8wWWbh/w0MurbNusmY/
-VcRHP/G0O0ynF/PTh7LDF+tGShrnd4UHgAAipzES/HhBfp4+cwXYerTaq91IQW+k
-KHLYO0YdLA3jqeD727gL4CYkQCkPTsUhRG3xbUD9Q7J7hJ3bQg5IFgDtMfzFJMX3
-flptj/5jcf97PCwW2bwuoWqpmV4u/kZmXHewYHMRjfZTrafZM3KbB1x9Zv6R9Icb
-AgMBAAGjggECMIH/MB0GA1UdDgQWBBRh0BoVha3OSmA34kKGMoiJtp2qMDCBwgYD
-VR0jBIG6MIG3gBSFXP15d8yaohoDibc1WkmkjW3PUKGBk6SBkDCBjTELMAkGA1UE
-BhMCQ1oxGjAYBgNVBAgMEUppaG9tb3JhdnNreSBrcmFqMQ0wCwYDVQQHDARCcm5v
-MRswGQYDVQQKDBJTY29yaWEgQ29ycG9yYXRpb24xNjA0BgNVBAMMLVNjb3JpYSBD
-b3Jwb3JhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eYIJAM58RO9sXvoH
-MAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQBs
-65lfyy6BwzXaz8EmrWj/5xerT1yQWKjiViZ0iJiFo2HTOs3FI1vv3IOEELn+65i2
-56hUBB22CRbCpgJVcPGzkPc/p15u5XQeCuCpYdcLGjOVT8TRDY+lJ32MVdzlA1pB
-2oxzTJYqTeGmWGMZmFvrpYuj4P2Cxroo+NcmShdgr1TNXdZkVf+sCwC15xmpxw8n
-bHOO801ip/FKX8LqYtO7FgogtlWqj1pKWUfyN+omoDP0dxNMGgmUqmpX5mjl09l2
-6gR+ULyRk+7CwAcVEoDKbQh1eM2brDW6olw7ynzYufOyT6n9zdqC55TB0ix0RxmR
-1pntbAM4SLI7FtKLH9aReKI6mh6hKrglKMiwq2bFUw33q4Mq1WGXmmc1hlkeqhCB
-jq6Xsr1It2C+qEAnLZ/sdiZLfXnsvkTC2FuXU3w5LSu5EBOVGhkAjM0vZR1b77PX
-cdjuXQc/DDjEC2WM995j8p1gM+NYeD0o1NXdWULpOHJEtVMIWnaL9PRQY6uP7vJl
-ObTSTf1XeP1fTN82fpdyhIuwoVH/CW0UJiMKE65dHqJAh2sG6TNGEnaTw39L74C2
-BHVPOAJ20h/FBSa0gIENyjNwESv45HeZ0dighxpHMZ28V1+EhDfrvYBklbHRpVWH
-GPyddLmQ8WCpsUW8enoHkzuVcQQNS4CTcj0jdTh/fw==
+MIIGnTCCBIWgAwIBAgIUcjcyBwt103/wVJnsjU67N/qqRJUwDQYJKoZIhvcNAQEL
+BQAwgYMxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwI
+QnJvb2tseW4xFTATBgNVBAoMDHp6emNvbXB1dGluZzE3MDUGA1UEAwwuenp6Y29t
+cHV0aW5nIENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0yMjA2
+MDkxNzM5MzdaFw0zMjA2MDYxNzM5MzdaMIGEMQswCQYDVQQGEwJVUzERMA8GA1UE
+CAwITmV3IFlvcmsxETAPBgNVBAcMCEJyb29rbHluMRUwEwYDVQQKDAx6enpjb21w
+dXRpbmcxODA2BgNVBAMML3p6emNvbXB1dGluZyBJbnRlcm1lZGlhdGUgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+3M1XdgW0FWqaR741s9wMPe1NT4cPCrkSmcX/GnwvZZLPECQj1O9xIOjpMJSMFolQ
+kKZ+Q3NyD5dDSa08qJu8/1ImGoK2/+OUjjwIkAX44CYC9TANp2UQxqHZPAkwmiQK
+8CkVif00uS5gbhnJP4qXWXS7YN/RDiXuG+x2KjcY0sR+2glPA9mQ0T5S7Waqc4Wm
+ZoixJBjcW2nZVnbIvHKPoCS0BVT9S+ou26fAKytMoCPo4zGbDZeofpbd+Ut5zQoi
+odO3OYgVgOMKRafKtLv3kEbXlBEZx3tjnyQwPr7z5yyW0a1ZKLpzayEUYYiPtcJM
+l4kYBJEVw3WXizQTiFYslu4Zcw1BFmlCaug4MW0JDIAtwQ8Y/8L03G5zw+v/e0GV
+eiwq/z53IRgl0AFvbG5cOTsG0VX3uxYyQF4zmpYmQaepW1cnNjNPZv0vEX5hwenW
+hOIipkZLxO6o0xTwuVOf9VLO6KNvhYgw3HGql18zWX+wrooCQY5EfOP1qy0rqyYT
+Vj0cIN8p1mheQzlCNxPsTHj1r5OqLMvdKgp/SBaNjvg94pTR1FK0Az5VttcNPHd5
+Laz9eccQuK4///yikrzYXB9gC+lVwgUKG4ecX2sQgDAwZWkvem1CajvGERX0A8Em
+OzP8LXX+XuwDEO/ScZ7z6hMif4JKyiaVnY6pEv7X4V0CAwEAAaOCAQQwggEAMB0G
+A1UdDgQWBBQqQUfkyrMWiOj85MummYJpN2mqfTCBwwYDVR0jBIG7MIG4gBQ3ZFqw
+7CWnwcnQTgmLQ2zTyYPH4aGBiaSBhjCBgzELMAkGA1UEBhMCVVMxETAPBgNVBAgM
+CE5ldyBZb3JrMREwDwYDVQQHDAhCcm9va2x5bjEVMBMGA1UECgwMenp6Y29tcHV0
+aW5nMTcwNQYDVQQDDC56enpjb21wdXRpbmcgQ2xpZW50IFJvb3QgQ2VydGlmaWNh
+dGUgQXV0aG9yaXR5ghQWgciotCx7xXfmPo/QhBVtwxawHjAMBgNVHRMEBTADAQH/
+MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAokFPow+L4SM04QbWRCoI
+ERtl7HZrantOCxnBjmzXIpxydEoiWbDibrjKUgl0fOORqMzHKIjB6vEhQtGufAh/
+nmf/gkLVzm910/Oxsa5d/mOSjl0LQbD3GUPfXwZzzuFuGFQaNPAWgNdRRts2SZg3
+hUzKGzNfBnYcSgGXfB7EwY1OsfsAECSeUQcUN5qPJokw5/g2Fj1E44cAOJiXi5VN
++tNe3bz3vWDR/BcMxx4of6ibYEKEXQz1mJwxPqVVuiFyoZF9PQbDbh1pWzg3beUZ
+nWsg+GHgfmHwRJDj9YaDtADwoLNwNDr4IBWBm6bBD0MB4R7Ufzvve9oDFbDw2ZQr
+RN0txnLfjf4I9bjDbsm7jtMhdWF9YoFOfYlSk/nvx6or9sx6yN2H9Oinvt63I/z/
+HsIYPuoZCO47BLnUTUHRKR/OwfXs8y1V+LJ4WcDHn23rRa8XSSGF7nkggP9ScdXW
+/MD6q9epeXUAt1ydblafDS7nx2+MHem98zVLZMdKYYcp2jo9KznIogT1InI5CYwq
+ighMOqvST66cIXAvprhInFcjTedzUuuFdX9wyvLICVsmzzIgAHAnN3fthm0vDAhb
+2l6AQ+rsYcj1GBvfL0ljLW+7UBAOiDKEexhe9MKlTGOy/jAEsvoOgayvB2hcXLlq
+7Y2ptXwfMqvRQOpXkUHCE7Q=
-----END CERTIFICATE-----
diff --git a/tests/tls/update.sh b/tests/tls/update.sh
deleted file mode 100755
index f3ffe3c..0000000
--- a/tests/tls/update.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-
-# source:
-# https://github.com/scoriacorp/docker-tls-memcached
-# courtesy Moisés Guimarães
-
-# extracting client credentials
-docker run --rm scoriacorp/tls_memcached cat /opt/certs/key/client.key > client.key
-docker run --rm scoriacorp/tls_memcached cat /opt/certs/crt/client.crt > client.crt
-
-# extracting client CA certificate
-docker run --rm scoriacorp/tls_memcached cat /opt/certs/crt/client-ca-root.crt > client-ca-root.crt
-
-# extracting server credentials
-docker run --rm scoriacorp/tls_memcached cat /opt/certs/key/server-rsa2048.key > server.key
-docker run --rm scoriacorp/tls_memcached cat /opt/certs/chain/server-rsa2048.pem > server_chain.pem
-
-# extracting CA certificate
-docker run --rm scoriacorp/tls_memcached cat /opt/certs/crt/ca-root.crt > ca-root.crt