diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2018-12-24 15:34:37 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2018-12-24 15:34:37 +0000 |
commit | 4b3710bb3cc9a1cabcde6b3ec6338a63236cdd8c (patch) | |
tree | f512e500d5aa8fae52a13d9ae248ec3e6f4360ef | |
parent | 7c940069fa58d8048d1a7f0688aee9d11280ab71 (diff) | |
download | aports-4b3710bb3cc9a1cabcde6b3ec6338a63236cdd8c.tar.bz2 aports-4b3710bb3cc9a1cabcde6b3ec6338a63236cdd8c.tar.xz |
community/lua-copas: fix tests
add fixes from upstream for tests
-rw-r--r-- | community/lua-copas/APKBUILD | 6 | ||||
-rw-r--r-- | community/lua-copas/default-tls1.2.patch | 13 | ||||
-rw-r--r-- | community/lua-copas/disable-https-tests.patch | 15 | ||||
-rw-r--r-- | community/lua-copas/test-certs.patch | 3226 |
4 files changed, 3243 insertions, 17 deletions
diff --git a/community/lua-copas/APKBUILD b/community/lua-copas/APKBUILD index e9fc5a6989..32c0571c2e 100644 --- a/community/lua-copas/APKBUILD +++ b/community/lua-copas/APKBUILD @@ -13,7 +13,8 @@ depends="lua-socket" checkdepends="lua5.1-coxpcall lua-sec" subpackages="" source="$pkgname-$pkgver.tar.gz::https://github.com/keplerproject/$_pkgname/archive/v$_pkgver.tar.gz - disable-https-tests.patch + default-tls1.2.patch + test-certs.patch ipv4-only.patch" builddir="$srcdir/$_pkgname-$_pkgver" @@ -63,5 +64,6 @@ _subpackage() { } sha512sums="dd83a513fbddb2f0164c3573b417623f5cc556413c4937be7e362f4c1667bad83391143e1bf609480726730ce488c4080e810f2ce12a98a7abb5293993c10182 lua-copas-2.0.2.tar.gz -eebded0a9accbc6b0a5ecd3c45e06710bf4b3279605b443fe3bfff40d9d9d23bdc0c508fb42506d14faa69a3c4cee0b8bef80ab8b721eac6d5aeab2aaa8c41e7 disable-https-tests.patch +d65a2d26ff025ec4b7c652bdf179a9f18078f736ec8f9166df077a47ec34cc4731cdeaa984d25c9556f332b36bfd9b4a7e2069284f8b63a4344e8a81b5ad72bc default-tls1.2.patch +f775cda7762f7924be8794ea2c77eb49740741a3cf9f67ca7b7e7563868d51f386ed473833e40b673af3aee5660a5e4767f43522bda1e0c38b2bf07c9df183df test-certs.patch 4fb2b65f41869b9729cc4672eebbfb2745a2d01af1cd54341b8306f57510f98e118eac77c77a980f4c8e8b181b6fda150061dc39819269e9ee64bf07656dfd54 ipv4-only.patch" diff --git a/community/lua-copas/default-tls1.2.patch b/community/lua-copas/default-tls1.2.patch new file mode 100644 index 0000000000..f6fd5433d7 --- /dev/null +++ b/community/lua-copas/default-tls1.2.patch @@ -0,0 +1,13 @@ +diff --git a/src/copas/http.lua b/src/copas/http.lua +index d9767fe..8e8dc64 100644 +--- a/src/copas/http.lua ++++ b/src/copas/http.lua +@@ -35,7 +35,7 @@ _M.USERAGENT = socket._VERSION + + -- Default settings for SSL + _M.SSLPORT = 443 +-_M.SSLPROTOCOL = "tlsv1" ++_M.SSLPROTOCOL = "tlsv1_2" + _M.SSLOPTIONS = "all" + _M.SSLVERIFY = "none" + diff --git a/community/lua-copas/disable-https-tests.patch b/community/lua-copas/disable-https-tests.patch deleted file mode 100644 index 5858048032..0000000000 --- a/community/lua-copas/disable-https-tests.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/Makefile b/Makefile -index 5b383d3..9d8c749 100644 ---- a/Makefile -+++ b/Makefile -@@ -24,8 +24,8 @@ install: - test: - $(LUA) $(PKGPATH) tests/largetransfer.lua - $(LUA) $(PKGPATH) tests/request.lua 'http://www.google.com' -- $(LUA) $(PKGPATH) tests/request.lua 'https://www.google.nl' -- $(LUA) $(PKGPATH) tests/httpredirect.lua -+# $(LUA) $(PKGPATH) tests/request.lua 'https://www.google.nl' -+# $(LUA) $(PKGPATH) tests/httpredirect.lua - $(LUA) $(PKGPATH) tests/limit.lua - $(LUA) $(PKGPATH) tests/connecttwice.lua - $(LUA) $(PKGPATH) tests/exit.lua diff --git a/community/lua-copas/test-certs.patch b/community/lua-copas/test-certs.patch new file mode 100644 index 0000000000..09769adc09 --- /dev/null +++ b/community/lua-copas/test-certs.patch @@ -0,0 +1,3226 @@ +From 2357ac46131ea86ce9c3c89ae67cd4557e527f35 Mon Sep 17 00:00:00 2001 +From: Thijs Schreijer <thijs@thijsschreijer.nl> +Date: Mon, 16 Jul 2018 21:50:35 +0200 +Subject: [PATCH] update test certs + +--- + .gitignore | 2 ++ + src/copas.lua | 22 ++++++++--------- + tests/certs/clientA.pem | 49 ++++++++++++++++++------------------- + tests/certs/clientAcert.pem | 22 ++++++++--------- + tests/certs/clientAkey.pem | 28 ++++++++++----------- + tests/certs/clientAreq.pem | 14 +++++------ + tests/certs/rootA.pem | 26 ++++++++++---------- + tests/certs/rootAkey.pem | 28 ++++++++++----------- + tests/certs/rootAreq.pem | 14 +++++------ + tests/certs/serverA.pem | 49 ++++++++++++++++++------------------- + tests/certs/serverAcert.pem | 22 ++++++++--------- + tests/certs/serverAkey.pem | 28 ++++++++++----------- + tests/certs/serverAreq.pem | 14 +++++------ + 13 files changed, 159 insertions(+), 159 deletions(-) + +diff --git a/.gitignore b/.gitignore +index e69de29..5ca0973 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -0,0 +1,2 @@ ++.DS_Store ++ +diff --git a/src/copas.lua b/src/copas.lua +index e2d36fc..4452760 100644 +--- a/src/copas.lua ++++ b/src/copas.lua +@@ -42,20 +42,20 @@ local function statusHandler(status, ...) + end + + function socket.protect(func) +-return function (...) ++ return function (...) + return statusHandler(pcall(func, ...)) +- end ++ end + end + + function socket.newtry(finalizer) +-return function (...) +- local status = (...) +- if not status then ++ return function (...) ++ local status = (...) ++ if not status then + pcall(finalizer, select(2, ...)) +- error({ (select(2, ...)) }, 0) ++ error({ (select(2, ...)) }, 0) ++ end ++ return ... + end +- return ... +- end + end + + local copas = {} +@@ -764,19 +764,19 @@ end + function copas.step(timeout) + _sleeping_t:tick(gettime()) + +- -- Need to wake up the select call it time for the next sleeping event ++ -- Need to wake up the select call in time for the next sleeping event + local nextwait = _sleeping:getnext() + if nextwait then + timeout = timeout and math.min(nextwait, timeout) or nextwait + else + if copas.finished() then + return false +- end ++ end + end + + local err = _select (timeout) + if err then +- if err == "timeout" then return false end ++ if err == "timeout" then return false end + return nil, err + end + +diff --git a/tests/certs/clientA.pem b/tests/certs/clientA.pem +index 2f09848..bdc18ed 100644 +--- a/tests/certs/clientA.pem ++++ b/tests/certs/clientA.pem +@@ -1,44 +1,43 @@ + -----BEGIN CERTIFICATE----- +-MIIDNTCCAp6gAwIBAgIJAOIlTl6l0XV8MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD ++MIIDNTCCAp6gAwIBAgIJANemCVlJDxN9MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xNzA2MjIxOTIxMDlaFw0xODA2MjIxOTIxMDlaMIGdMQswCQYD ++BlJvb3QgQTAeFw0xODA3MTYxOTQyMzRaFw0xOTA3MTYxOTQyMzRaMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG + A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhD +-bGllbnQgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmPCHWAHNKzTWUZk/ +-vMpErq3ZwKsbFHaUVj0pzLccTu16S+Y1veN8YxnqQRiimtQzzAVTAqGEOgsibi7f +-6uvi4pgs0QSlemGBWdopqOSKYcHl6ZHIl1pDcjyEiGCFmXWAMl6WEIMoIizE5zJC +-u9ADTI00QF+SNs+bQMwRy6fi3ysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB ++bGllbnQgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqgmw9Lff2yb2Q+DE ++BL5WP4vbhceAaKoAg0wd7x2LIW7jXyxEJsWIIPKYF0Fc62N51Xzu2/CFXFP9NF94 ++e5KuuO2hq347FExPjcAdFG/owyRs8tUQe7CcaL56drpRVIWd8NMdCGXyrr9JAShi ++aqYUy22LuVDFMHFD1vfrKkmrYPcCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB + hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE +-FDd+6wOlZBAyQV4dckc+8+sGc61LMB8GA1UdIwQYMBaAFFG/cjK0+S9u05oKZT1O +-gsc5EaxQMA0GCSqGSIb3DQEBBQUAA4GBACAx4J2JCBEK8HDde1J/+pxEUktBczFF +-ywymGOkpK5YSsqqCalILdXUxPT5XL/gXzAhzhzoFxlErQ7mwg5O9Gj7XCaJOVLxF +-yt+RWxv33JsVwV7HJVHKmSZeyhzhhcNfry6QhqU8HY44B3uAt8O91XZ5J5ZytVn0 +-J84qpYxH1TKE ++FCDXAeKTRvjBgQrQnMm3V2xSx24DMB8GA1UdIwQYMBaAFJqLTBDdTkyou7inDtgb ++5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBAMSqQyatsFCPwux6lqI04VLSgXTSmlaq ++p22QcyLWTHHIyX0o+lyHXrrqmUsDJmHu73x0lFOMwvzLDwmb+N8rC3rjZGl/srtM ++Hap5kI/8i9RNrFiCN1rid7bLvMSDILyIa1FNMQ+exSgkV8uRXaPKw0ahk8Uuqi5m ++/1l1/fTpSY1i + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- +-MIIDwjCCAyugAwIBAgIJAMB4Jht1jkbcMA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD ++MIIDwjCCAyugAwIBAgIJAPN164v+usx3MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xNzA2MjIxOTIxMDVaFw0xODA2MjIxOTIxMDVaMIGdMQswCQYD ++BlJvb3QgQTAeFw0xODA3MTYxOTQxNThaFw0xOTA3MTYxOTQxNThaMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvKqlaBwEf51hkCB3 +-WgQ6P/5YpwOXxtQzGo3hE0kWaBgBMEVcAI/AmGU7wc0jOW+VHpq03J/LC810792n +-DkxzEPg6VGQgrrd5DgxEEr3J8NPmavX0GUt5LRTCFs8cDwL/J13sSeGufGbXoaPD +-MN9C5ZfcviMyK6lOnLGubkevmPkCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRv3Iy +-tPkvbtOaCmU9ToLHORGsUDCB0gYDVR0jBIHKMIHHgBRRv3IytPkvbtOaCmU9ToLH +-ORGsUKGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh ++BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7uDRKW+129vq6WZX ++txSS69znx2+0NjWpamrw/DRKNdjqqBlW9vBuk2FfVv2B60kdQuK18djUCZYpxaqu ++zq3dTEYbYuVI5pd5KzNT5eaz5l46BKGojq4nw8wyocucQVaRXFLyNZ2884LikkEr ++8hG6MDu6kz/2fEoHizRUyBD0U7ECAwEAAaOCAQYwggECMB0GA1UdDgQWBBSai0wQ ++3U5MqLu4pw7YG+aemj9hJTCB0gYDVR0jBIHKMIHHgBSai0wQ3U5MqLu4pw7YG+ae ++mj9hJaGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh + bnRvMR8wHQYDVQQHExZTYW50byBBbnRvbmlvIGRvIENhbmFhMRowGAYDVQQKExFT + YW50byBUb25pY28gTHRkYTEnMCUGA1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRl +-ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDAeCYbdY5G3DAMBgNVHRMEBTAD +-AQH/MA0GCSqGSIb3DQEBBQUAA4GBADx3k5hsOZkZZP/U3YVh3ieY9AXwhtB8r/vQ +-ZZI9MSc3OD/PbgkrXt6u5ZVdsatul/5BN/uqapD7sBktXoWz9B3nCJ0AovwS4rwn +-qZ9MB44engpEbZLvkXiUyqk3os2UaeKd3WhV6pUW2H+3V4xcmHbB90zNjnC+AU5b +-g34jvD4v ++ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDzdeuL/rrMdzAMBgNVHRMEBTAD ++AQH/MA0GCSqGSIb3DQEBBQUAA4GBACWoQT4vih0r11WXU+k9OngkaZEYqjIh8V2A ++RwnsZBRJulKzPnLuZgmfXLUlj/0bTrWXA5ARBxm6Zb6Mw8uURt+qO5jxFu32LL5Z ++0b/yS+gemnVefIq6VGBiqskvKDuX6UAqr4bKCJMs+imQwjzU64Oe0xXeMVazAXeA ++234dl4Tu + -----END CERTIFICATE----- +- +\ No newline at end of file +diff --git a/tests/certs/clientAcert.pem b/tests/certs/clientAcert.pem +index 2092dff..10afc38 100644 +--- a/tests/certs/clientAcert.pem ++++ b/tests/certs/clientAcert.pem +@@ -1,20 +1,20 @@ + -----BEGIN CERTIFICATE----- +-MIIDNTCCAp6gAwIBAgIJAOIlTl6l0XV8MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD ++MIIDNTCCAp6gAwIBAgIJANemCVlJDxN9MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xNzA2MjIxOTIxMDlaFw0xODA2MjIxOTIxMDlaMIGdMQswCQYD ++BlJvb3QgQTAeFw0xODA3MTYxOTQyMzRaFw0xOTA3MTYxOTQyMzRaMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG + A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhD +-bGllbnQgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmPCHWAHNKzTWUZk/ +-vMpErq3ZwKsbFHaUVj0pzLccTu16S+Y1veN8YxnqQRiimtQzzAVTAqGEOgsibi7f +-6uvi4pgs0QSlemGBWdopqOSKYcHl6ZHIl1pDcjyEiGCFmXWAMl6WEIMoIizE5zJC +-u9ADTI00QF+SNs+bQMwRy6fi3ysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB ++bGllbnQgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqgmw9Lff2yb2Q+DE ++BL5WP4vbhceAaKoAg0wd7x2LIW7jXyxEJsWIIPKYF0Fc62N51Xzu2/CFXFP9NF94 ++e5KuuO2hq347FExPjcAdFG/owyRs8tUQe7CcaL56drpRVIWd8NMdCGXyrr9JAShi ++aqYUy22LuVDFMHFD1vfrKkmrYPcCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB + hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE +-FDd+6wOlZBAyQV4dckc+8+sGc61LMB8GA1UdIwQYMBaAFFG/cjK0+S9u05oKZT1O +-gsc5EaxQMA0GCSqGSIb3DQEBBQUAA4GBACAx4J2JCBEK8HDde1J/+pxEUktBczFF +-ywymGOkpK5YSsqqCalILdXUxPT5XL/gXzAhzhzoFxlErQ7mwg5O9Gj7XCaJOVLxF +-yt+RWxv33JsVwV7HJVHKmSZeyhzhhcNfry6QhqU8HY44B3uAt8O91XZ5J5ZytVn0 +-J84qpYxH1TKE ++FCDXAeKTRvjBgQrQnMm3V2xSx24DMB8GA1UdIwQYMBaAFJqLTBDdTkyou7inDtgb ++5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBAMSqQyatsFCPwux6lqI04VLSgXTSmlaq ++p22QcyLWTHHIyX0o+lyHXrrqmUsDJmHu73x0lFOMwvzLDwmb+N8rC3rjZGl/srtM ++Hap5kI/8i9RNrFiCN1rid7bLvMSDILyIa1FNMQ+exSgkV8uRXaPKw0ahk8Uuqi5m ++/1l1/fTpSY1i + -----END CERTIFICATE----- +diff --git a/tests/certs/clientAkey.pem b/tests/certs/clientAkey.pem +index 6768f54..651c8c4 100644 +--- a/tests/certs/clientAkey.pem ++++ b/tests/certs/clientAkey.pem +@@ -1,16 +1,16 @@ + -----BEGIN PRIVATE KEY----- +-MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJjwh1gBzSs01lGZ +-P7zKRK6t2cCrGxR2lFY9Kcy3HE7tekvmNb3jfGMZ6kEYoprUM8wFUwKhhDoLIm4u +-3+rr4uKYLNEEpXphgVnaKajkimHB5emRyJdaQ3I8hIhghZl1gDJelhCDKCIsxOcy +-QrvQA0yNNEBfkjbPm0DMEcun4t8rAgMBAAECgYEAiiH0nBBEdpmqWNjJMIKftgVf +-fx0LwFe5coqbjkJ0VvU2WAb80xz746YsZc8STjUK82J7rwyimKol1s6Pf2a96/Vm +-ibPFNNHXSpLPsMn5AvvnqaQEIB2PXk+loC3MrPXLYQk3VhlqjxAUD6jPoTKp6b1k +-IM0o5dZOBf8mRGLASgECQQDLO99CwYq17astx6YDMtgEiTABUv/aBo8kD5SqFnZI +-MyUZiEQcRjxbYqDKLvLYCC6+FgVhHti1VgS6kBQK1k7hAkEAwKXMcwsZm9EB+rSw +-HJFvj7bd19AND9yUoO8WkuoOgrDFoR72b85htNxOywjGFkbEGJ28kAl7GapiYcsN +-ak5riwJANQcuPfDaDJYy8AMD4hnGG4jgKbhKYc0MVFBsbeTmf/g4We0gOHBrFz0o +-zxho7M1VxOtiA/FUghwrp7IoSJuagQJBAK/rN2Wer0XweIQ918xeqqdr7+0RWbww +-S7EiY1TJU3LYhb/6DERRDDwiKfmSC4FwIcXw1K4bWkQ3qRtwVtHKxr0CQAX9r5hH +-cbIpt6gYBV3ggGYo865oqJ3jipYqE12RrEsccjyKaDwSH2f6xCsfi4CdhKh3aqJE +-KHaXPqk3+8RQXCM= ++MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKoJsPS339sm9kPg ++xAS+Vj+L24XHgGiqAINMHe8diyFu418sRCbFiCDymBdBXOtjedV87tvwhVxT/TRf ++eHuSrrjtoat+OxRMT43AHRRv6MMkbPLVEHuwnGi+ena6UVSFnfDTHQhl8q6/SQEo ++YmqmFMtti7lQxTBxQ9b36ypJq2D3AgMBAAECgYB+U+jmR13HAfFgiLLZG1gUqiGU ++CJ48JGFxKrHqnrZpRmsioE6Zx5PVdqbMUEFqmGNB2ynSuaU67SNnL67hkB7CCxfT +++IjOs9TwP8QeY8MGJo3B+aLgdgCISiFcmcvahWUHvRUR8rq7WTr5ThTQyo/IPUbu ++54ED3PB8HjiEDh0RIQJBAN5BhTIb8ReXaVpSltpaEKwzG8RrWEZ9bB1v4fwd4KHN ++oU27cX9WljSv+g+Ojl+f4qIoOOBicKkW6WudxDn+UbkCQQDD2pjZ82BBbzd6xHmR ++YsY7AVEEO3euYeqff1SyjCOIyznGPJHH4+/5B6iWrTC6gLbMVuSF9sd9c1LcetBO ++fWAvAkEAvzt25H+gOKFBt8KaI7Qc5l1vRdjq8nPWQ5nRwsDeV7n7UUu3w034HctQ ++iHQrUmHaeZXMIlzw/LxHCR6NCS0mmQJAVXCRadNAVIteGpKHriL281q5qyz+IvbY ++UchMfK+h+NUfWRmnRxpq36q1ozXeoh3woOfvPXnQwSuEJGb3ZKZRRQJBAMYqGioX ++EZQNfBJ1kSnW1PoZaR/TCVOi2DJ13FQslQP1BUmVLCvm0Z21YbcKhlFDzBny4nCD ++0ksTfouj7w/VR94= + -----END PRIVATE KEY----- +diff --git a/tests/certs/clientAreq.pem b/tests/certs/clientAreq.pem +index bc5e56b..bdd77b3 100644 +--- a/tests/certs/clientAreq.pem ++++ b/tests/certs/clientAreq.pem +@@ -3,11 +3,11 @@ MIIB3jCCAUcCAQAwgZ0xCzAJBgNVBAYTAkJSMRcwFQYDVQQIEw5Fc3Bpcml0byBT + YW50bzEfMB0GA1UEBxMWU2FudG8gQW50b25pbyBkbyBDYW5hYTEYMBYGA1UEChMP + U2FvIFRvbmljbyBMdGRhMScwJQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVy + IFNjaWVuY2UxETAPBgNVBAMTCENsaWVudCBBMIGfMA0GCSqGSIb3DQEBAQUAA4GN +-ADCBiQKBgQCY8IdYAc0rNNZRmT+8ykSurdnAqxsUdpRWPSnMtxxO7XpL5jW943xj +-GepBGKKa1DPMBVMCoYQ6CyJuLt/q6+LimCzRBKV6YYFZ2imo5IphweXpkciXWkNy +-PISIYIWZdYAyXpYQgygiLMTnMkK70ANMjTRAX5I2z5tAzBHLp+LfKwIDAQABoAAw +-DQYJKoZIhvcNAQEFBQADgYEATV1z5nOIQ6HRkUJUG3Bli5mpUJibjn37DgVFBQsR +-jI1VsoMywesGR3nUDUqY+TOTiPUG6tUImEb/69EPPN9O7KpiNEzvyWpmyCEBkoxT +-hNiGzg9LFNCTA8AqU0bsYGwDQgNa1uRxlXnKx2v20uu7Euj3OOEk+5PR8dLKa/sp +-DIc= ++ADCBiQKBgQCqCbD0t9/bJvZD4MQEvlY/i9uFx4BoqgCDTB3vHYshbuNfLEQmxYgg ++8pgXQVzrY3nVfO7b8IVcU/00X3h7kq647aGrfjsUTE+NwB0Ub+jDJGzy1RB7sJxo ++vnp2ulFUhZ3w0x0IZfKuv0kBKGJqphTLbYu5UMUwcUPW9+sqSatg9wIDAQABoAAw ++DQYJKoZIhvcNAQEFBQADgYEAJXW12Ov1xFANtbru6GGVKzv42CQ53nruaVEltSmx ++0TN1BljnkuVY5vCckv7LXC8ogGF2NCAOFzVBTuUWYeX8lBjV0wuN3qCZbChoDKid ++Gvwszyj8xZr0Aof4eDPm6iKoxLQm23fvPvL00jIYqsqUe23gYoxWXFmAclmp4+vr ++U4w= + -----END CERTIFICATE REQUEST----- +diff --git a/tests/certs/rootA.pem b/tests/certs/rootA.pem +index cbd837b..dac07a0 100644 +--- a/tests/certs/rootA.pem ++++ b/tests/certs/rootA.pem +@@ -1,23 +1,23 @@ + -----BEGIN CERTIFICATE----- +-MIIDwjCCAyugAwIBAgIJAMB4Jht1jkbcMA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD ++MIIDwjCCAyugAwIBAgIJAPN164v+usx3MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xNzA2MjIxOTIxMDVaFw0xODA2MjIxOTIxMDVaMIGdMQswCQYD ++BlJvb3QgQTAeFw0xODA3MTYxOTQxNThaFw0xOTA3MTYxOTQxNThaMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvKqlaBwEf51hkCB3 +-WgQ6P/5YpwOXxtQzGo3hE0kWaBgBMEVcAI/AmGU7wc0jOW+VHpq03J/LC810792n +-DkxzEPg6VGQgrrd5DgxEEr3J8NPmavX0GUt5LRTCFs8cDwL/J13sSeGufGbXoaPD +-MN9C5ZfcviMyK6lOnLGubkevmPkCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRv3Iy +-tPkvbtOaCmU9ToLHORGsUDCB0gYDVR0jBIHKMIHHgBRRv3IytPkvbtOaCmU9ToLH +-ORGsUKGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh ++BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7uDRKW+129vq6WZX ++txSS69znx2+0NjWpamrw/DRKNdjqqBlW9vBuk2FfVv2B60kdQuK18djUCZYpxaqu ++zq3dTEYbYuVI5pd5KzNT5eaz5l46BKGojq4nw8wyocucQVaRXFLyNZ2884LikkEr ++8hG6MDu6kz/2fEoHizRUyBD0U7ECAwEAAaOCAQYwggECMB0GA1UdDgQWBBSai0wQ ++3U5MqLu4pw7YG+aemj9hJTCB0gYDVR0jBIHKMIHHgBSai0wQ3U5MqLu4pw7YG+ae ++mj9hJaGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh + bnRvMR8wHQYDVQQHExZTYW50byBBbnRvbmlvIGRvIENhbmFhMRowGAYDVQQKExFT + YW50byBUb25pY28gTHRkYTEnMCUGA1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRl +-ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDAeCYbdY5G3DAMBgNVHRMEBTAD +-AQH/MA0GCSqGSIb3DQEBBQUAA4GBADx3k5hsOZkZZP/U3YVh3ieY9AXwhtB8r/vQ +-ZZI9MSc3OD/PbgkrXt6u5ZVdsatul/5BN/uqapD7sBktXoWz9B3nCJ0AovwS4rwn +-qZ9MB44engpEbZLvkXiUyqk3os2UaeKd3WhV6pUW2H+3V4xcmHbB90zNjnC+AU5b +-g34jvD4v ++ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDzdeuL/rrMdzAMBgNVHRMEBTAD ++AQH/MA0GCSqGSIb3DQEBBQUAA4GBACWoQT4vih0r11WXU+k9OngkaZEYqjIh8V2A ++RwnsZBRJulKzPnLuZgmfXLUlj/0bTrWXA5ARBxm6Zb6Mw8uURt+qO5jxFu32LL5Z ++0b/yS+gemnVefIq6VGBiqskvKDuX6UAqr4bKCJMs+imQwjzU64Oe0xXeMVazAXeA ++234dl4Tu + -----END CERTIFICATE----- +diff --git a/tests/certs/rootAkey.pem b/tests/certs/rootAkey.pem +index 6c809b1..987a73e 100644 +--- a/tests/certs/rootAkey.pem ++++ b/tests/certs/rootAkey.pem +@@ -1,16 +1,16 @@ + -----BEGIN PRIVATE KEY----- +-MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALyqpWgcBH+dYZAg +-d1oEOj/+WKcDl8bUMxqN4RNJFmgYATBFXACPwJhlO8HNIzlvlR6atNyfywvNdO/d +-pw5McxD4OlRkIK63eQ4MRBK9yfDT5mr19BlLeS0UwhbPHA8C/ydd7Enhrnxm16Gj +-wzDfQuWX3L4jMiupTpyxrm5Hr5j5AgMBAAECgYEAqfmD8/vqAZ8k2tilLrBIWoco +-D7Ao+bUMJYxVjy51xWp7B6Y1cTwR5DqwT7YlWgWxb1UqROqh4AxGoiQr8bHmp4Jm +-mmRFr8upCcglDsHSR4XsYkPJWjhtCkU9gGEDdurxz90INoqOWY/kgPiuBFzMX0rO +-+lUBJc+3ge18ybBlelECQQDqgw4/5b6ilqD/w5OH2EQ4ENskUZ5L/ZpXpmJkOAZ+ +-rcMDC5X1pDhaaH15pdeCQc+pVaL63Jwt/0UyArFlnU2PAkEAzfQyTla0I2oPLvM+ +-Mll7zf2Wr5wAuN1/Vt9KxTsqL8AUh7n13Y4Jk1qNJ2VsC/3tyUhRyb9tYbBIMqf6 +-W9/89wJAKZ95N/4fB9yUVtDvrnzEHu9e9eNGpVYtvsDZVdBb1sAgjLnRs/ehyOoi +-2ySES6pCoVuBweTGE6PrNCUmN1LkIQJAW473GkqDVMceruGmQd30IxRce/9fds/J +-f4ZPCDWQQKAkwF4UhoVRjneQDvaQvRgLMRN8gLMgXnBu+E4jB9sg6wJAbT87IpPn +-36kgbB+ARdmyfYwxJswCPggwbotmLPp0JtD3AHn+B5UUMRP676LQZnvElNV7Lv2g +-V9rKcnclNnBLzA== ++MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAO7g0Slvtdvb6ulm ++V7cUkuvc58dvtDY1qWpq8Pw0SjXY6qgZVvbwbpNhX1b9getJHULitfHY1AmWKcWq ++rs6t3UxGG2LlSOaXeSszU+Xms+ZeOgShqI6uJ8PMMqHLnEFWkVxS8jWdvPOC4pJB ++K/IRujA7upM/9nxKB4s0VMgQ9FOxAgMBAAECgYEAlboIoEZK4PHpPj5NwI1+waQH ++C3Syqj/cXr2FKy/DTBkYjCDF56YwSOSBk872PfnoA2KC1IIp9ZBPwnwHcbh8ufo9 ++vZP0rEpjSV5B7d81uoMOt4YaS1UOxv8GQCO3r+5dj/L/CVYsj13W1MaozYVmvTiW ++md7Rz+N4JjHWYu60EqECQQD4SHAXsEJfi+cbadV5/+HTmiqoH3cUYnK34BNs4ulo ++D+3QGIiaslyde97D+08EbVWWdyWcGwoSft0CJG4Gim09AkEA9k2L4GP6qa1Afn+I ++YmkMRtyo/4taCc9QBWuNRfvd1UTarvrA4nLKyBjL9Y7walFv3q/DaLrCyg/Bg/ZQ ++aV8PhQJBAJuRh+rP3kbP+ncK0WAoHO/hYWkGji6PoSHlnUZUx7sUgAYr2SxVJgLn ++YqWaCeDUQRSOg1pU9vKv2vtEqEwg4GECQE1uRYoOhE/xWnQqLbsaYTSpzCtCKNUq ++qnJ5xFj6/Fs+oS0fQaIvClbrjLsu65/Q6EVuphT3maMiXujYd6EYtG0CQHYvVroh ++2jzj0VZaoWEIJgMXjV8+UVpP5cQMHltSZtzuQITKmAAEhcqXm26W940sRfMGRgrw ++u0M3347nbXdYj8c= + -----END PRIVATE KEY----- +diff --git a/tests/certs/rootAreq.pem b/tests/certs/rootAreq.pem +index 27639cb..8d66597 100644 +--- a/tests/certs/rootAreq.pem ++++ b/tests/certs/rootAreq.pem +@@ -3,11 +3,11 @@ MIIB3jCCAUcCAQAwgZ0xCzAJBgNVBAYTAkJSMRcwFQYDVQQIEw5Fc3Bpcml0byBT + YW50bzEfMB0GA1UEBxMWU2FudG8gQW50b25pbyBkbyBDYW5hYTEaMBgGA1UEChMR + U2FudG8gVG9uaWNvIEx0ZGExJzAlBgNVBAsTHkRlcGFydG1lbnQgb2YgQ29tcHV0 + ZXIgU2NpZW5jZTEPMA0GA1UEAxMGUm9vdCBBMIGfMA0GCSqGSIb3DQEBAQUAA4GN +-ADCBiQKBgQC8qqVoHAR/nWGQIHdaBDo//linA5fG1DMajeETSRZoGAEwRVwAj8CY +-ZTvBzSM5b5UemrTcn8sLzXTv3acOTHMQ+DpUZCCut3kODEQSvcnw0+Zq9fQZS3kt +-FMIWzxwPAv8nXexJ4a58Zteho8Mw30Lll9y+IzIrqU6csa5uR6+Y+QIDAQABoAAw +-DQYJKoZIhvcNAQEFBQADgYEAjAS9/dtDcC345uUVpdZHDeF2yrNna6Lb9U2Mgy3S +-Cqd8OsBwdOuOLmeR0GG+F/qP2YiRrXHbM522Dqt4xah84axmgpAo+7xl/YLMNTq2 +-I2lAgapnCfVOVA99bCloFFuJyXyt4w7A6YxMD9orjVdJdt4AYGb2mNeOB0AeKPRI +-ZYQ= ++ADCBiQKBgQDu4NEpb7Xb2+rpZle3FJLr3OfHb7Q2NalqavD8NEo12OqoGVb28G6T ++YV9W/YHrSR1C4rXx2NQJlinFqq7Ord1MRhti5Ujml3krM1Pl5rPmXjoEoaiOrifD ++zDKhy5xBVpFcUvI1nbzzguKSQSvyEbowO7qTP/Z8SgeLNFTIEPRTsQIDAQABoAAw ++DQYJKoZIhvcNAQEFBQADgYEA2QCr5Q66xJoE+CTbvhhneLCvpjU+KBIKOAQ28s3f ++RfFMXvO4UOXdB+NU06hQDkeYZbACeikw/5Cl+Q2O5Kx57LteW+AWvP9T2Bvh9WnJ ++fgjm+GArxuVSb2r9KwAF8Cn6r8O09L0C75hmQTVU+rjBghZ1lsl0dVtdn+ueoVHj ++MKo= + -----END CERTIFICATE REQUEST----- +diff --git a/tests/certs/serverA.pem b/tests/certs/serverA.pem +index 6b50c67..02324d0 100644 +--- a/tests/certs/serverA.pem ++++ b/tests/certs/serverA.pem +@@ -1,44 +1,43 @@ + -----BEGIN CERTIFICATE----- +-MIIDSjCCArOgAwIBAgIJAOIlTl6l0XV7MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD ++MIIDSjCCArOgAwIBAgIJANemCVlJDxN8MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xNzA2MjIxOTIxMDdaFw0xODA2MjIxOTIxMDdaMIGdMQswCQYD ++BlJvb3QgQTAeFw0xODA3MTYxOTQyMjNaFw0xOTA3MTYxOTQyMjNaMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG + A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhT +-ZXJ2ZXIgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsKyppd9LbWZZ8bAk +-/WtRh5uWUqv14z6IKNloY+niDsfmipME3W4uK762jjSv3woCLBy9LU+i1UbxwnGe +-asHb8ZykyvoFZqYllZOoC5m5jiBrI66iiBdkjOw0C4uXxsQ2Kz1NXfIigtTo+NOh +-mLoGP45sAiWEEDWoP3kgp2A4d/sCAwEAAaOBjzCBjDAJBgNVHRMEAjAAMBEGCWCG ++ZXJ2ZXIgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo41QhH/YvQQA/wzv ++uPayMbSReq0LghCvSAFXPfeRLMEBoYA+hiF+HqByKRG/SRY1hZkTY1GrNn3XT5Gd ++Dy0IyKXqZXsMAP9gKOe3meWpPdM5ibsenQywjfJJQJDDKRL4oS12Ir5vgu4lvQOU ++L39S9P7W0YEhTK0Cw5PRnEZss2UCAwEAAaOBjzCBjDAJBgNVHRMEAjAAMBEGCWCG + SAGG+EIBAQQEAwIGQDAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg +-Q2VydGlmaWNhdGUwHQYDVR0OBBYEFKSuYfhndGCO5opzbDEdo0cac/1aMB8GA1Ud +-IwQYMBaAFFG/cjK0+S9u05oKZT1Ogsc5EaxQMA0GCSqGSIb3DQEBBQUAA4GBAE/2 +-FVob8QI09FDHIYH2VOqT5UfvxuoSxz6okMVbmrDIgiTHdrtBZ1pHQv4+nCXvk/Yl +-GUaVsYytIbKnEW6GYkMHaX5AibLqFA9r6bXAPpbuwQjxWVX6dyGVGe1WBTTZWytq +-aMIP0TcYboF1e8zKNEl7Od6CnmjFnBGSdkS7RXNP ++Q2VydGlmaWNhdGUwHQYDVR0OBBYEFIXCp7y4eaLeSSst0Yy7wFZ/dmS5MB8GA1Ud ++IwQYMBaAFJqLTBDdTkyou7inDtgb5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBACN0 ++hei2KY0AYe+TrwYq3UfyyskhNT7L48makxs/qHArXZCDf2BTctmY+95Nfgpj5kLi ++oW+e/Wu92cbor/UJAYQ0cJYLNa4k55loL6hjm2PKo2eni3NEk6SxHRQFtuVowCtF ++Kgbi29DkkQc7WRWDy2blZiIYb1oUOlktk1vp8CxY + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- +-MIIDwjCCAyugAwIBAgIJAMB4Jht1jkbcMA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD ++MIIDwjCCAyugAwIBAgIJAPN164v+usx3MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xNzA2MjIxOTIxMDVaFw0xODA2MjIxOTIxMDVaMIGdMQswCQYD ++BlJvb3QgQTAeFw0xODA3MTYxOTQxNThaFw0xOTA3MTYxOTQxNThaMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvKqlaBwEf51hkCB3 +-WgQ6P/5YpwOXxtQzGo3hE0kWaBgBMEVcAI/AmGU7wc0jOW+VHpq03J/LC810792n +-DkxzEPg6VGQgrrd5DgxEEr3J8NPmavX0GUt5LRTCFs8cDwL/J13sSeGufGbXoaPD +-MN9C5ZfcviMyK6lOnLGubkevmPkCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRv3Iy +-tPkvbtOaCmU9ToLHORGsUDCB0gYDVR0jBIHKMIHHgBRRv3IytPkvbtOaCmU9ToLH +-ORGsUKGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh ++BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7uDRKW+129vq6WZX ++txSS69znx2+0NjWpamrw/DRKNdjqqBlW9vBuk2FfVv2B60kdQuK18djUCZYpxaqu ++zq3dTEYbYuVI5pd5KzNT5eaz5l46BKGojq4nw8wyocucQVaRXFLyNZ2884LikkEr ++8hG6MDu6kz/2fEoHizRUyBD0U7ECAwEAAaOCAQYwggECMB0GA1UdDgQWBBSai0wQ ++3U5MqLu4pw7YG+aemj9hJTCB0gYDVR0jBIHKMIHHgBSai0wQ3U5MqLu4pw7YG+ae ++mj9hJaGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh + bnRvMR8wHQYDVQQHExZTYW50byBBbnRvbmlvIGRvIENhbmFhMRowGAYDVQQKExFT + YW50byBUb25pY28gTHRkYTEnMCUGA1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRl +-ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDAeCYbdY5G3DAMBgNVHRMEBTAD +-AQH/MA0GCSqGSIb3DQEBBQUAA4GBADx3k5hsOZkZZP/U3YVh3ieY9AXwhtB8r/vQ +-ZZI9MSc3OD/PbgkrXt6u5ZVdsatul/5BN/uqapD7sBktXoWz9B3nCJ0AovwS4rwn +-qZ9MB44engpEbZLvkXiUyqk3os2UaeKd3WhV6pUW2H+3V4xcmHbB90zNjnC+AU5b +-g34jvD4v ++ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDzdeuL/rrMdzAMBgNVHRMEBTAD ++AQH/MA0GCSqGSIb3DQEBBQUAA4GBACWoQT4vih0r11WXU+k9OngkaZEYqjIh8V2A ++RwnsZBRJulKzPnLuZgmfXLUlj/0bTrWXA5ARBxm6Zb6Mw8uURt+qO5jxFu32LL5Z ++0b/yS+gemnVefIq6VGBiqskvKDuX6UAqr4bKCJMs+imQwjzU64Oe0xXeMVazAXeA ++234dl4Tu + -----END CERTIFICATE----- +- +\ No newline at end of file +diff --git a/tests/certs/serverAcert.pem b/tests/certs/serverAcert.pem +index 76295a1..72d2c87 100644 +--- a/tests/certs/serverAcert.pem ++++ b/tests/certs/serverAcert.pem +@@ -1,20 +1,20 @@ + -----BEGIN CERTIFICATE----- +-MIIDSjCCArOgAwIBAgIJAOIlTl6l0XV7MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD ++MIIDSjCCArOgAwIBAgIJANemCVlJDxN8MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw + JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xNzA2MjIxOTIxMDdaFw0xODA2MjIxOTIxMDdaMIGdMQswCQYD ++BlJvb3QgQTAeFw0xODA3MTYxOTQyMjNaFw0xOTA3MTYxOTQyMjNaMIGdMQswCQYD + VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv + IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG + A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhT +-ZXJ2ZXIgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsKyppd9LbWZZ8bAk +-/WtRh5uWUqv14z6IKNloY+niDsfmipME3W4uK762jjSv3woCLBy9LU+i1UbxwnGe +-asHb8ZykyvoFZqYllZOoC5m5jiBrI66iiBdkjOw0C4uXxsQ2Kz1NXfIigtTo+NOh +-mLoGP45sAiWEEDWoP3kgp2A4d/sCAwEAAaOBjzCBjDAJBgNVHRMEAjAAMBEGCWCG ++ZXJ2ZXIgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo41QhH/YvQQA/wzv ++uPayMbSReq0LghCvSAFXPfeRLMEBoYA+hiF+HqByKRG/SRY1hZkTY1GrNn3XT5Gd ++Dy0IyKXqZXsMAP9gKOe3meWpPdM5ibsenQywjfJJQJDDKRL4oS12Ir5vgu4lvQOU ++L39S9P7W0YEhTK0Cw5PRnEZss2UCAwEAAaOBjzCBjDAJBgNVHRMEAjAAMBEGCWCG + SAGG+EIBAQQEAwIGQDAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg +-Q2VydGlmaWNhdGUwHQYDVR0OBBYEFKSuYfhndGCO5opzbDEdo0cac/1aMB8GA1Ud +-IwQYMBaAFFG/cjK0+S9u05oKZT1Ogsc5EaxQMA0GCSqGSIb3DQEBBQUAA4GBAE/2 +-FVob8QI09FDHIYH2VOqT5UfvxuoSxz6okMVbmrDIgiTHdrtBZ1pHQv4+nCXvk/Yl +-GUaVsYytIbKnEW6GYkMHaX5AibLqFA9r6bXAPpbuwQjxWVX6dyGVGe1WBTTZWytq +-aMIP0TcYboF1e8zKNEl7Od6CnmjFnBGSdkS7RXNP ++Q2VydGlmaWNhdGUwHQYDVR0OBBYEFIXCp7y4eaLeSSst0Yy7wFZ/dmS5MB8GA1Ud ++IwQYMBaAFJqLTBDdTkyou7inDtgb5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBACN0 ++hei2KY0AYe+TrwYq3UfyyskhNT7L48makxs/qHArXZCDf2BTctmY+95Nfgpj5kLi ++oW+e/Wu92cbor/UJAYQ0cJYLNa4k55loL6hjm2PKo2eni3NEk6SxHRQFtuVowCtF ++Kgbi29DkkQc7WRWDy2blZiIYb1oUOlktk1vp8CxY + -----END CERTIFICATE----- +diff --git a/tests/certs/serverAkey.pem b/tests/certs/serverAkey.pem +index 3fb8745..c9f6b65 100644 +--- a/tests/certs/serverAkey.pem ++++ b/tests/certs/serverAkey.pem +@@ -1,16 +1,16 @@ + -----BEGIN PRIVATE KEY----- +-MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALCsqaXfS21mWfGw +-JP1rUYebllKr9eM+iCjZaGPp4g7H5oqTBN1uLiu+to40r98KAiwcvS1PotVG8cJx +-nmrB2/GcpMr6BWamJZWTqAuZuY4gayOuoogXZIzsNAuLl8bENis9TV3yIoLU6PjT +-oZi6Bj+ObAIlhBA1qD95IKdgOHf7AgMBAAECgYB0kafpmpgg2ZxU3Dy7vFhx2hVn +-/K/jPPoHwdKfwcx2piyVmAVouG7cTBwVXewAhJEEW/3x7I5qnEGdYuv8UmZ0PThb +-JMQT5l3Gf8iaA0J0e8munOfXI6bycVfAlLxuFi4yh7JWhN/zzcKwusQFHAPDEWyX +-6/tddjvg3BOP/IolyQJBAOrhoBg4DT/aVPe/HPpChw6MuPW8uTojGj51u1LsLM1x +-E0g1PCsTwG9VcddZLnUnxPsshYWjIslC6jZ6xly/lwcCQQDAj0MT3m5oewAdpZuL +-R6SblIFht+5sKlovRczPtAVp9apeAkFQVDrrDXcHDassUwB2OokPR4MLNkQcBv1I +-TQZtAkEAr4uj0JYL6P4v5N30NWKFeC1ai2badQYJNkddkrMrJPxu8de/uV5Qw6Tz +-qYRgwXTQtvzmaiOr+wnE7KTEHkue/wJADDtNdH6lnsdpa3iwl7lWUHevfEiVwZMz +-JVuWtf7mdSOgzdXw1ixzjajOTcllfSxMlDYFrM3LGjQ5QVqETkpuRQJATlYDDFv1 +-vFn6wCK+PT/JLZZoBD74iPskOUJ+raELWctAM6u3rRP9qzacv4gjXJ1IIxSrOlia +-Z0EEKCmEu3XOkg== ++MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKONUIR/2L0EAP8M ++77j2sjG0kXqtC4IQr0gBVz33kSzBAaGAPoYhfh6gcikRv0kWNYWZE2NRqzZ910+R ++nQ8tCMil6mV7DAD/YCjnt5nlqT3TOYm7Hp0MsI3ySUCQwykS+KEtdiK+b4LuJb0D ++lC9/UvT+1tGBIUytAsOT0ZxGbLNlAgMBAAECgYBcMPYoGiDEOxOMsXAXpQfBOPWg ++XxbTlDAZuJfC2GA/B/SxYqbb2NlMzkhLmjNnMVuuGSFypMCMENdjhMMxoMMH4HZ8 ++XFsecHE9OS2KrkNQJ7OxIa9RRtGwtm8QdVav2YsQQHwoG9qB4Q+vKTyUkofIEH86 ++bV2aX7lpY7b2E8jZgQJBANcJO2+GmTOKlV0KFWtvL7x+mULJCkrpLDHEPMyFCyQT ++xkzWJ8ZeL0l0r8gbF91ykO2mnjm2X2pHC9XU6lkIDRUCQQDCtVWnvGF+QCwsmAIo ++RnTZtSd0jCjQQWCA+ZvqAIRMXtIQ3gL60kuYCnVMIk4XvF2iZltpgxJsPoCysGnW ++q8ERAkBHq4EOy8q1/gOITfsToqxDY+KK+tyeWRbsw14MQG+VJ64ZH+uD1xJlpimM ++RVNv8GZTfwwPajRlBKbyLxOoduF9AkEAuzBWXuJO4G+ViHHDcTD7Weo9OmEdQ8n2 ++m0hdysQgbMOkNS8bskPHBS7Ywg8hANTJOD4rl+65IXOdiyzrM8T/4QJBAMzV6Bkz ++uQYRFULqLjQnaS3wOyJtoPZChWBsKaJO8WJSp+zB5Fk75cmFkLdrkKdmf0zxZX9h ++sbvrkWGXdyBD9y8= + -----END PRIVATE KEY----- +diff --git a/tests/certs/serverAreq.pem b/tests/certs/serverAreq.pem +index ccf2778..bf93f3f 100644 +--- a/tests/certs/serverAreq.pem ++++ b/tests/certs/serverAreq.pem +@@ -3,11 +3,11 @@ MIIB3jCCAUcCAQAwgZ0xCzAJBgNVBAYTAkJSMRcwFQYDVQQIEw5Fc3Bpcml0byBT + YW50bzEfMB0GA1UEBxMWU2FudG8gQW50b25pbyBkbyBDYW5hYTEYMBYGA1UEChMP + U2FvIFRvbmljbyBMdGRhMScwJQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVy + IFNjaWVuY2UxETAPBgNVBAMTCFNlcnZlciBBMIGfMA0GCSqGSIb3DQEBAQUAA4GN +-ADCBiQKBgQCwrKml30ttZlnxsCT9a1GHm5ZSq/XjPogo2Whj6eIOx+aKkwTdbi4r +-vraONK/fCgIsHL0tT6LVRvHCcZ5qwdvxnKTK+gVmpiWVk6gLmbmOIGsjrqKIF2SM +-7DQLi5fGxDYrPU1d8iKC1Oj406GYugY/jmwCJYQQNag/eSCnYDh3+wIDAQABoAAw +-DQYJKoZIhvcNAQELBQADgYEACr7TW7m5hDJlD5oz2bsM43RcOSzLJLv3UZiJbklN +-pX3NqpSpWIqZRjlbppL+f1VPbIhvxuIGdjCKJ5IhMwiaI5+5bAVbT0m6GSLw47Vu +-oidCX+Lhahv8bCQPP87WzXtBnx45igt4YNU9vthj4Ov1MiXN0S9i8JuqS1YCiw5l +-Sxg= ++ADCBiQKBgQCjjVCEf9i9BAD/DO+49rIxtJF6rQuCEK9IAVc995EswQGhgD6GIX4e ++oHIpEb9JFjWFmRNjUas2fddPkZ0PLQjIpeplewwA/2Ao57eZ5ak90zmJux6dDLCN ++8klAkMMpEvihLXYivm+C7iW9A5Qvf1L0/tbRgSFMrQLDk9GcRmyzZQIDAQABoAAw ++DQYJKoZIhvcNAQELBQADgYEAFGv0sHAVvqDtEbW0afiFeuWwJqBf4lz+xNZt1x2I ++qrxDX9iZ/EiIZNXubPZLsOAnYE9+BcfJ0tGC2p9b6+EmmtkwxytIlbaVAtleHTt2 ++f0xr27k4YqIIrB63N8seaawOtQebyq76BHBSpoRHnzrfelnrkTqH+yR4Ldee7mJA ++9mY= + -----END CERTIFICATE REQUEST----- +From b84301acb0e7b60e9428b7f626b82d301869cf74 Mon Sep 17 00:00:00 2001 +From: Thijs Schreijer <thijs@thijsschreijer.nl> +Date: Mon, 3 Dec 2018 10:38:48 +0100 +Subject: [PATCH] auto-generate test certificates through makefile + +--- + .gitignore | 3 +- + Makefile | 39 +++-- + src/copas/http.lua | 20 +-- + tests/certs/_readme.md | 3 + + tests/certs/all.bat | 14 ++ + tests/certs/all.sh | 13 ++ + tests/certs/clientA.bat | 9 + + tests/certs/clientA.cnf | 316 ++++++++++++++++++++++++++++++++++++ + tests/certs/clientA.pem | 43 ----- + tests/certs/clientA.sh | 12 ++ + tests/certs/clientAcert.pem | 20 --- + tests/certs/clientAkey.pem | 16 -- + tests/certs/clientAreq.pem | 13 -- + tests/certs/clientB.bat | 9 + + tests/certs/clientB.cnf | 316 ++++++++++++++++++++++++++++++++++++ + tests/certs/clientB.sh | 12 ++ + tests/certs/rootA.bat | 7 + + tests/certs/rootA.cnf | 315 +++++++++++++++++++++++++++++++++++ + tests/certs/rootA.pem | 23 --- + tests/certs/rootA.sh | 7 + + tests/certs/rootAkey.pem | 16 -- + tests/certs/rootAreq.pem | 13 -- + tests/certs/rootB.bat | 7 + + tests/certs/rootB.cnf | 315 +++++++++++++++++++++++++++++++++++ + tests/certs/rootB.sh | 7 + + tests/certs/serverA.bat | 9 + + tests/certs/serverA.cnf | 316 ++++++++++++++++++++++++++++++++++++ + tests/certs/serverA.pem | 43 ----- + tests/certs/serverA.sh | 12 ++ + tests/certs/serverAcert.pem | 20 --- + tests/certs/serverAkey.pem | 16 -- + tests/certs/serverAreq.pem | 13 -- + tests/certs/serverB.bat | 9 + + tests/certs/serverB.cnf | 316 ++++++++++++++++++++++++++++++++++++ + tests/certs/serverB.sh | 12 ++ + 35 files changed, 2076 insertions(+), 258 deletions(-) + create mode 100644 tests/certs/_readme.md + create mode 100644 tests/certs/all.bat + create mode 100755 tests/certs/all.sh + create mode 100644 tests/certs/clientA.bat + create mode 100644 tests/certs/clientA.cnf + delete mode 100644 tests/certs/clientA.pem + create mode 100755 tests/certs/clientA.sh + delete mode 100644 tests/certs/clientAcert.pem + delete mode 100644 tests/certs/clientAkey.pem + delete mode 100644 tests/certs/clientAreq.pem + create mode 100644 tests/certs/clientB.bat + create mode 100644 tests/certs/clientB.cnf + create mode 100755 tests/certs/clientB.sh + create mode 100644 tests/certs/rootA.bat + create mode 100644 tests/certs/rootA.cnf + delete mode 100644 tests/certs/rootA.pem + create mode 100755 tests/certs/rootA.sh + delete mode 100644 tests/certs/rootAkey.pem + delete mode 100644 tests/certs/rootAreq.pem + create mode 100644 tests/certs/rootB.bat + create mode 100644 tests/certs/rootB.cnf + create mode 100755 tests/certs/rootB.sh + create mode 100644 tests/certs/serverA.bat + create mode 100644 tests/certs/serverA.cnf + delete mode 100644 tests/certs/serverA.pem + create mode 100755 tests/certs/serverA.sh + delete mode 100644 tests/certs/serverAcert.pem + delete mode 100644 tests/certs/serverAkey.pem + delete mode 100644 tests/certs/serverAreq.pem + create mode 100644 tests/certs/serverB.bat + create mode 100644 tests/certs/serverB.cnf + create mode 100755 tests/certs/serverB.sh + +diff --git a/.gitignore b/.gitignore +index 5ca0973..18e0fea 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -1,2 +1,3 @@ + .DS_Store +- ++**/*.srl ++**/*.pem +diff --git a/Makefile b/Makefile +index 5b383d3..5580f9f 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,6 +1,6 @@ + # $Id: Makefile,v 1.3 2007/10/29 22:50:16 carregal Exp $ + +-DESTDIR ?= ++DESTDIR ?= + + # Default prefix + PREFIX ?= /usr/local +@@ -8,11 +8,14 @@ PREFIX ?= /usr/local + # System's lua directory (where Lua libraries are installed) + LUA_DIR ?= $(PREFIX)/share/lua/5.1 + ++DELIM=-e "print(([[=]]):rep(70))" + PKGPATH=-e "package.path='src/?.lua;'..package.path" + + # Lua interpreter + LUA=lua + ++.PHONY: certs ++ + install: + mkdir -p $(DESTDIR)$(LUA_DIR)/copas + cp src/copas.lua $(DESTDIR)$(LUA_DIR)/copas.lua +@@ -21,16 +24,29 @@ install: + cp src/copas/http.lua $(DESTDIR)$(LUA_DIR)/copas/http.lua + cp src/copas/limit.lua $(DESTDIR)$(LUA_DIR)/copas/limit.lua + +-test: +- $(LUA) $(PKGPATH) tests/largetransfer.lua +- $(LUA) $(PKGPATH) tests/request.lua 'http://www.google.com' +- $(LUA) $(PKGPATH) tests/request.lua 'https://www.google.nl' +- $(LUA) $(PKGPATH) tests/httpredirect.lua +- $(LUA) $(PKGPATH) tests/limit.lua +- $(LUA) $(PKGPATH) tests/connecttwice.lua +- $(LUA) $(PKGPATH) tests/exit.lua +- $(LUA) $(PKGPATH) tests/exittest.lua +- $(LUA) $(PKGPATH) tests/removeserver.lua ++tests/certs/clientA.pem: ++ cd ./tests/certs && \ ++ ./rootA.sh && \ ++ ./rootB.sh && \ ++ ./serverA.sh && \ ++ ./serverB.sh && \ ++ ./clientA.sh && \ ++ ./clientB.sh && \ ++ cd ../.. ++ ++certs: tests/certs/clientA.pem ++ ++test: certs ++ $(LUA) $(DELIM) $(PKGPATH) tests/largetransfer.lua ++ $(LUA) $(DELIM) $(PKGPATH) tests/request.lua 'http://www.google.com' ++ $(LUA) $(DELIM) $(PKGPATH) tests/request.lua 'https://www.google.nl' ++ $(LUA) $(DELIM) $(PKGPATH) tests/httpredirect.lua ++ $(LUA) $(DELIM) $(PKGPATH) tests/limit.lua ++ $(LUA) $(DELIM) $(PKGPATH) tests/connecttwice.lua ++ $(LUA) $(DELIM) $(PKGPATH) tests/exit.lua ++ $(LUA) $(DELIM) $(PKGPATH) tests/exittest.lua ++ $(LUA) $(DELIM) $(PKGPATH) tests/removeserver.lua ++ $(LUA) $(DELIM) + + coverage: + $(RM) luacov.stats.out +@@ -39,3 +55,4 @@ coverage: + + clean: + $(RM) luacov.stats.out luacov.report.out ++ $(RM) tests/certs/*.pem tests/certs/*.srl +diff --git a/src/copas/http.lua b/src/copas/http.lua +index 8e8dc64..d6508e1 100644 +--- a/src/copas/http.lua ++++ b/src/copas/http.lua +@@ -230,7 +230,7 @@ local function adjustheaders(reqt) + } + -- if we have authentication information, pass it along + if reqt.user and reqt.password then +- lower["authorization"] = ++ lower["authorization"] = + "Basic " .. (mime.b64(reqt.user .. ":" .. reqt.password)) + end + -- override with user headers +@@ -254,7 +254,7 @@ local function adjustrequest(reqt) + -- explicit components override url + for i,v in base.pairs(reqt) do nreqt[i] = v end + if nreqt.port == "" then nreqt.port = 80 end +- socket.try(nreqt.host and nreqt.host ~= "", ++ socket.try(nreqt.host and nreqt.host ~= "", + "invalid host '" .. base.tostring(nreqt.host) .. "'") + -- compute uri if user hasn't overriden + nreqt.uri = reqt.uri or adjusturi(nreqt) +@@ -292,10 +292,10 @@ local trequest, tredirect + source = reqt.source, + sink = reqt.sink, + headers = reqt.headers, +- proxy = reqt.proxy, ++ proxy = reqt.proxy, + nredirects = (reqt.nredirects or 0) + 1, + create = reqt.create +- } ++ } + -- pass location header back as a hint we redirected + headers = headers or {} + headers.location = headers.location or location +@@ -312,7 +312,7 @@ end + h:sendheaders(nreqt.headers) + -- if there is a body, send it + if nreqt.source then +- h:sendbody(nreqt.headers, nreqt.source, nreqt.step) ++ h:sendbody(nreqt.headers, nreqt.source, nreqt.step) + end + local code, status = h:receivestatusline() + -- if it is an HTTP/0.9 server, simply get the body and we are done +@@ -322,13 +322,13 @@ end + end + local headers + -- ignore any 100-continue messages +- while code == 100 do ++ while code == 100 do + headers = h:receiveheaders() + code, status = h:receivestatusline() + end + headers = h:receiveheaders() + -- at this point we should have a honest reply from the server +- -- we can't redirect if we already used the source, so we report the error ++ -- we can't redirect if we already used the source, so we report the error + if shouldredirect(nreqt, code, headers) and not nreqt.source then + h:close() + return tredirect(reqt, headers.location) +@@ -361,7 +361,7 @@ local function tcp(params) + if not u.port then + u.port = _M.SSLPORT + reqt.url = url.build(u) +- reqt.port = _M.SSLPORT ++ reqt.port = _M.SSLPORT + end + washttps = true + return conn +@@ -371,7 +371,7 @@ local function tcp(params) + try(nil, "Unallowed insecure redirect https to http") + end + return copas.wrap(socket.tcp()) +- end ++ end + end + end + +@@ -395,7 +395,7 @@ _M.parseRequest = function(u, b) + end + + _M.request = socket.protect(function(reqt, body) +- if base.type(reqt) == "string" then ++ if base.type(reqt) == "string" then + reqt = _M.parseRequest(reqt, body) + local ok, code, headers, status = _M.request(reqt) + +diff --git a/tests/certs/_readme.md b/tests/certs/_readme.md +new file mode 100644 +index 0000000..1cd8396 +--- /dev/null ++++ b/tests/certs/_readme.md +@@ -0,0 +1,3 @@ ++The certificate generation scripts here are copied from LuaSec ++ ++ +diff --git a/tests/certs/all.bat b/tests/certs/all.bat +new file mode 100644 +index 0000000..b1e03ca +--- /dev/null ++++ b/tests/certs/all.bat +@@ -0,0 +1,14 @@ ++REM make sure the 'openssl.exe' commandline tool is in your path before starting! ++REM set the path below; ++set opensslpath=c:\program files (x86)\openssl-win32\bin ++ ++ ++ ++setlocal ++set path=%opensslpath%;%path% ++call roota.bat ++call rootb.bat ++call servera.bat ++call serverb.bat ++call clienta.bat ++call clientb.bat +diff --git a/tests/certs/all.sh b/tests/certs/all.sh +new file mode 100755 +index 0000000..da6ac96 +--- /dev/null ++++ b/tests/certs/all.sh +@@ -0,0 +1,13 @@ ++#!/bin/sh ++ ++CWD=$(PWD) ++cd $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) ++ ++./rootA.sh ++./rootB.sh ++./serverA.sh ++./serverB.sh ++./clientA.sh ++./clientB.sh ++ ++cd $CWD +diff --git a/tests/certs/clientA.bat b/tests/certs/clientA.bat +new file mode 100644 +index 0000000..112cdef +--- /dev/null ++++ b/tests/certs/clientA.bat +@@ -0,0 +1,9 @@ ++rem #!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout clientAkey.pem -out clientAreq.pem -nodes -config ./clientA.cnf -days 365 -batch ++ ++openssl x509 -req -in clientAreq.pem -sha1 -extfile ./clientA.cnf -extensions usr_cert -CA rootA.pem -CAkey rootAkey.pem -CAcreateserial -out clientAcert.pem -days 365 ++ ++copy clientAcert.pem + rootA.pem clientA.pem ++ ++openssl x509 -subject -issuer -noout -in clientA.pem +diff --git a/tests/certs/clientA.cnf b/tests/certs/clientA.cnf +new file mode 100644 +index 0000000..0fea787 +--- /dev/null ++++ b/tests/certs/clientA.cnf +@@ -0,0 +1,316 @@ ++# ++# OpenSSL example configuration file. ++# This is mostly being used for generation of certificate requests. ++# ++ ++# This definition stops the following lines choking if HOME isn't ++# defined. ++HOME = . ++RANDFILE = $ENV::HOME/.rnd ++ ++# Extra OBJECT IDENTIFIER info: ++#oid_file = $ENV::HOME/.oid ++oid_section = new_oids ++ ++# To use this configuration file with the "-extfile" option of the ++# "openssl x509" utility, name here the section containing the ++# X.509v3 extensions to use: ++# extensions = ++# (Alternatively, use a configuration file that has only ++# X.509v3 extensions in its main [= default] section.) ++ ++[ new_oids ] ++ ++# We can add new OIDs in here for use by 'ca' and 'req'. ++# Add a simple OID like this: ++# testoid1=1.2.3.4 ++# Or use config file substitution like this: ++# testoid2=${testoid1}.5.6 ++ ++#################################################################### ++[ ca ] ++default_ca = CA_default # The default ca section ++ ++#################################################################### ++[ CA_default ] ++ ++dir = ./demoCA # Where everything is kept ++certs = $dir/certs # Where the issued certs are kept ++crl_dir = $dir/crl # Where the issued crl are kept ++database = $dir/index.txt # database index file. ++#unique_subject = no # Set to 'no' to allow creation of ++ # several ctificates with same subject. ++new_certs_dir = $dir/newcerts # default place for new certs. ++ ++certificate = $dir/cacert.pem # The CA certificate ++serial = $dir/serial # The current serial number ++crlnumber = $dir/crlnumber # the current crl number ++ # must be commented out to leave a V1 CRL ++crl = $dir/crl.pem # The current CRL ++private_key = $dir/private/cakey.pem # The private key ++RANDFILE = $dir/private/.rand # private random number file ++ ++x509_extensions = usr_cert # The extensions to add to the cert ++ ++# Comment out the following two lines for the "traditional" ++# (and highly broken) format. ++name_opt = ca_default # Subject Name options ++cert_opt = ca_default # Certificate field options ++ ++# Extension copying option: use with caution. ++# copy_extensions = copy ++ ++# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs ++# so this is commented out by default to leave a V1 CRL. ++# crlnumber must also be commented out to leave a V1 CRL. ++# crl_extensions = crl_ext ++ ++default_days = 365 # how long to certify for ++default_crl_days= 30 # how long before next CRL ++default_md = sha1 # which md to use. ++preserve = no # keep passed DN ordering ++ ++# A few difference way of specifying how similar the request should look ++# For type CA, the listed attributes must be the same, and the optional ++# and supplied fields are just that :-) ++policy = policy_match ++ ++# For the CA policy ++[ policy_match ] ++countryName = match ++stateOrProvinceName = match ++organizationName = match ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++# For the 'anything' policy ++# At this point in time, you must list all acceptable 'object' ++# types. ++[ policy_anything ] ++countryName = optional ++stateOrProvinceName = optional ++localityName = optional ++organizationName = optional ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++#################################################################### ++[ req ] ++default_bits = 1024 ++default_keyfile = privkey.pem ++distinguished_name = req_distinguished_name ++attributes = req_attributes ++x509_extensions = v3_ca # The extensions to add to the self signed cert ++ ++# Passwords for private keys if not present they will be prompted for ++# input_password = secret ++# output_password = secret ++ ++# This sets a mask for permitted string types. There are several options. ++# default: PrintableString, T61String, BMPString. ++# pkix : PrintableString, BMPString. ++# utf8only: only UTF8Strings. ++# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). ++# MASK:XXXX a literal mask value. ++# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings ++# so use this option with caution! ++string_mask = nombstr ++ ++# req_extensions = v3_req # The extensions to add to a certificate request ++ ++[ req_distinguished_name ] ++countryName = Country Name (2 letter code) ++countryName_default = BR ++countryName_min = 2 ++countryName_max = 2 ++ ++stateOrProvinceName = State or Province Name (full name) ++stateOrProvinceName_default = Some-State ++stateOrProvinceName_default = Espirito Santo ++ ++localityName = Locality Name (eg, city) ++localityName_default = Santo Antonio do Canaa ++ ++0.organizationName = Organization Name (eg, company) ++0.organizationName_default = Sao Tonico Ltda ++ ++# we can do this but it is not needed normally :-) ++#1.organizationName = Second Organization Name (eg, company) ++#1.organizationName_default = World Wide Web Pty Ltd ++ ++organizationalUnitName = Organizational Unit Name (eg, section) ++organizationalUnitName_default = Department of Computer Science ++ ++commonName = Common Name (eg, YOUR name) ++commonName_default = Client A ++commonName_max = 64 ++ ++emailAddress = Email Address ++emailAddress_max = 64 ++ ++# SET-ex3 = SET extension number 3 ++ ++[ req_attributes ] ++challengePassword = A challenge password ++challengePassword_min = 4 ++challengePassword_max = 20 ++ ++unstructuredName = An optional company name ++ ++[ usr_cert ] ++ ++# These extensions are added when 'ca' signs a request. ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++[ v3_req ] ++ ++# Extensions to add to a certificate request ++ ++basicConstraints = CA:FALSE ++keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++[ v3_ca ] ++ ++ ++# Extensions for a typical CA ++ ++ ++# PKIX recommendation. ++ ++subjectKeyIdentifier=hash ++ ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++# This is what PKIX recommends but some broken software chokes on critical ++# extensions. ++#basicConstraints = critical,CA:true ++# So we do this instead. ++basicConstraints = CA:true ++ ++# Key usage: this is typical for a CA certificate. However since it will ++# prevent it being used as an test self-signed certificate it is best ++# left out by default. ++# keyUsage = cRLSign, keyCertSign ++ ++# Some might want this also ++# nsCertType = sslCA, emailCA ++ ++# Include email address in subject alt name: another PKIX recommendation ++# subjectAltName=email:copy ++# Copy issuer details ++# issuerAltName=issuer:copy ++ ++# DER hex encoding of an extension: beware experts only! ++# obj=DER:02:03 ++# Where 'obj' is a standard or added object ++# You can even override a supported extension: ++# basicConstraints= critical, DER:30:03:01:01:FF ++ ++[ crl_ext ] ++ ++# CRL extensions. ++# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. ++ ++# issuerAltName=issuer:copy ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++[ proxy_cert_ext ] ++# These extensions should be added when creating a proxy certificate ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer:always ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++# This really needs to be in place for it to be a proxy certificate. ++proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo +diff --git a/tests/certs/clientA.pem b/tests/certs/clientA.pem +deleted file mode 100644 +index bdc18ed..0000000 +--- a/tests/certs/clientA.pem ++++ /dev/null +@@ -1,43 +0,0 @@ +------BEGIN CERTIFICATE----- +-MIIDNTCCAp6gAwIBAgIJANemCVlJDxN9MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xODA3MTYxOTQyMzRaFw0xOTA3MTYxOTQyMzRaMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG +-A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhD +-bGllbnQgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqgmw9Lff2yb2Q+DE +-BL5WP4vbhceAaKoAg0wd7x2LIW7jXyxEJsWIIPKYF0Fc62N51Xzu2/CFXFP9NF94 +-e5KuuO2hq347FExPjcAdFG/owyRs8tUQe7CcaL56drpRVIWd8NMdCGXyrr9JAShi +-aqYUy22LuVDFMHFD1vfrKkmrYPcCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB +-hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE +-FCDXAeKTRvjBgQrQnMm3V2xSx24DMB8GA1UdIwQYMBaAFJqLTBDdTkyou7inDtgb +-5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBAMSqQyatsFCPwux6lqI04VLSgXTSmlaq +-p22QcyLWTHHIyX0o+lyHXrrqmUsDJmHu73x0lFOMwvzLDwmb+N8rC3rjZGl/srtM +-Hap5kI/8i9RNrFiCN1rid7bLvMSDILyIa1FNMQ+exSgkV8uRXaPKw0ahk8Uuqi5m +-/1l1/fTpSY1i +------END CERTIFICATE----- +------BEGIN CERTIFICATE----- +-MIIDwjCCAyugAwIBAgIJAPN164v+usx3MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xODA3MTYxOTQxNThaFw0xOTA3MTYxOTQxNThaMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7uDRKW+129vq6WZX +-txSS69znx2+0NjWpamrw/DRKNdjqqBlW9vBuk2FfVv2B60kdQuK18djUCZYpxaqu +-zq3dTEYbYuVI5pd5KzNT5eaz5l46BKGojq4nw8wyocucQVaRXFLyNZ2884LikkEr +-8hG6MDu6kz/2fEoHizRUyBD0U7ECAwEAAaOCAQYwggECMB0GA1UdDgQWBBSai0wQ +-3U5MqLu4pw7YG+aemj9hJTCB0gYDVR0jBIHKMIHHgBSai0wQ3U5MqLu4pw7YG+ae +-mj9hJaGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh +-bnRvMR8wHQYDVQQHExZTYW50byBBbnRvbmlvIGRvIENhbmFhMRowGAYDVQQKExFT +-YW50byBUb25pY28gTHRkYTEnMCUGA1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRl +-ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDzdeuL/rrMdzAMBgNVHRMEBTAD +-AQH/MA0GCSqGSIb3DQEBBQUAA4GBACWoQT4vih0r11WXU+k9OngkaZEYqjIh8V2A +-RwnsZBRJulKzPnLuZgmfXLUlj/0bTrWXA5ARBxm6Zb6Mw8uURt+qO5jxFu32LL5Z +-0b/yS+gemnVefIq6VGBiqskvKDuX6UAqr4bKCJMs+imQwjzU64Oe0xXeMVazAXeA +-234dl4Tu +------END CERTIFICATE----- +diff --git a/tests/certs/clientA.sh b/tests/certs/clientA.sh +new file mode 100755 +index 0000000..0350ede +--- /dev/null ++++ b/tests/certs/clientA.sh +@@ -0,0 +1,12 @@ ++#!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout clientAkey.pem -out clientAreq.pem \ ++ -nodes -config ./clientA.cnf -days 365 -batch ++ ++openssl x509 -req -in clientAreq.pem -sha1 -extfile ./clientA.cnf \ ++ -extensions usr_cert -CA rootA.pem -CAkey rootAkey.pem -CAcreateserial \ ++ -out clientAcert.pem -days 365 ++ ++cat clientAcert.pem rootA.pem > clientA.pem ++ ++openssl x509 -subject -issuer -noout -in clientA.pem +diff --git a/tests/certs/clientAcert.pem b/tests/certs/clientAcert.pem +deleted file mode 100644 +index 10afc38..0000000 +--- a/tests/certs/clientAcert.pem ++++ /dev/null +@@ -1,20 +0,0 @@ +------BEGIN CERTIFICATE----- +-MIIDNTCCAp6gAwIBAgIJANemCVlJDxN9MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xODA3MTYxOTQyMzRaFw0xOTA3MTYxOTQyMzRaMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG +-A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhD +-bGllbnQgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqgmw9Lff2yb2Q+DE +-BL5WP4vbhceAaKoAg0wd7x2LIW7jXyxEJsWIIPKYF0Fc62N51Xzu2/CFXFP9NF94 +-e5KuuO2hq347FExPjcAdFG/owyRs8tUQe7CcaL56drpRVIWd8NMdCGXyrr9JAShi +-aqYUy22LuVDFMHFD1vfrKkmrYPcCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgB +-hvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYE +-FCDXAeKTRvjBgQrQnMm3V2xSx24DMB8GA1UdIwQYMBaAFJqLTBDdTkyou7inDtgb +-5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBAMSqQyatsFCPwux6lqI04VLSgXTSmlaq +-p22QcyLWTHHIyX0o+lyHXrrqmUsDJmHu73x0lFOMwvzLDwmb+N8rC3rjZGl/srtM +-Hap5kI/8i9RNrFiCN1rid7bLvMSDILyIa1FNMQ+exSgkV8uRXaPKw0ahk8Uuqi5m +-/1l1/fTpSY1i +------END CERTIFICATE----- +diff --git a/tests/certs/clientAkey.pem b/tests/certs/clientAkey.pem +deleted file mode 100644 +index 651c8c4..0000000 +--- a/tests/certs/clientAkey.pem ++++ /dev/null +@@ -1,16 +0,0 @@ +------BEGIN PRIVATE KEY----- +-MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKoJsPS339sm9kPg +-xAS+Vj+L24XHgGiqAINMHe8diyFu418sRCbFiCDymBdBXOtjedV87tvwhVxT/TRf +-eHuSrrjtoat+OxRMT43AHRRv6MMkbPLVEHuwnGi+ena6UVSFnfDTHQhl8q6/SQEo +-YmqmFMtti7lQxTBxQ9b36ypJq2D3AgMBAAECgYB+U+jmR13HAfFgiLLZG1gUqiGU +-CJ48JGFxKrHqnrZpRmsioE6Zx5PVdqbMUEFqmGNB2ynSuaU67SNnL67hkB7CCxfT +-+IjOs9TwP8QeY8MGJo3B+aLgdgCISiFcmcvahWUHvRUR8rq7WTr5ThTQyo/IPUbu +-54ED3PB8HjiEDh0RIQJBAN5BhTIb8ReXaVpSltpaEKwzG8RrWEZ9bB1v4fwd4KHN +-oU27cX9WljSv+g+Ojl+f4qIoOOBicKkW6WudxDn+UbkCQQDD2pjZ82BBbzd6xHmR +-YsY7AVEEO3euYeqff1SyjCOIyznGPJHH4+/5B6iWrTC6gLbMVuSF9sd9c1LcetBO +-fWAvAkEAvzt25H+gOKFBt8KaI7Qc5l1vRdjq8nPWQ5nRwsDeV7n7UUu3w034HctQ +-iHQrUmHaeZXMIlzw/LxHCR6NCS0mmQJAVXCRadNAVIteGpKHriL281q5qyz+IvbY +-UchMfK+h+NUfWRmnRxpq36q1ozXeoh3woOfvPXnQwSuEJGb3ZKZRRQJBAMYqGioX +-EZQNfBJ1kSnW1PoZaR/TCVOi2DJ13FQslQP1BUmVLCvm0Z21YbcKhlFDzBny4nCD +-0ksTfouj7w/VR94= +------END PRIVATE KEY----- +diff --git a/tests/certs/clientAreq.pem b/tests/certs/clientAreq.pem +deleted file mode 100644 +index bdd77b3..0000000 +--- a/tests/certs/clientAreq.pem ++++ /dev/null +@@ -1,13 +0,0 @@ +------BEGIN CERTIFICATE REQUEST----- +-MIIB3jCCAUcCAQAwgZ0xCzAJBgNVBAYTAkJSMRcwFQYDVQQIEw5Fc3Bpcml0byBT +-YW50bzEfMB0GA1UEBxMWU2FudG8gQW50b25pbyBkbyBDYW5hYTEYMBYGA1UEChMP +-U2FvIFRvbmljbyBMdGRhMScwJQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVy +-IFNjaWVuY2UxETAPBgNVBAMTCENsaWVudCBBMIGfMA0GCSqGSIb3DQEBAQUAA4GN +-ADCBiQKBgQCqCbD0t9/bJvZD4MQEvlY/i9uFx4BoqgCDTB3vHYshbuNfLEQmxYgg +-8pgXQVzrY3nVfO7b8IVcU/00X3h7kq647aGrfjsUTE+NwB0Ub+jDJGzy1RB7sJxo +-vnp2ulFUhZ3w0x0IZfKuv0kBKGJqphTLbYu5UMUwcUPW9+sqSatg9wIDAQABoAAw +-DQYJKoZIhvcNAQEFBQADgYEAJXW12Ov1xFANtbru6GGVKzv42CQ53nruaVEltSmx +-0TN1BljnkuVY5vCckv7LXC8ogGF2NCAOFzVBTuUWYeX8lBjV0wuN3qCZbChoDKid +-Gvwszyj8xZr0Aof4eDPm6iKoxLQm23fvPvL00jIYqsqUe23gYoxWXFmAclmp4+vr +-U4w= +------END CERTIFICATE REQUEST----- +diff --git a/tests/certs/clientB.bat b/tests/certs/clientB.bat +new file mode 100644 +index 0000000..9f341f6 +--- /dev/null ++++ b/tests/certs/clientB.bat +@@ -0,0 +1,9 @@ ++rem #!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout clientBkey.pem -out clientBreq.pem -nodes -config ./clientB.cnf -days 365 -batch ++ ++openssl x509 -req -in clientBreq.pem -sha1 -extfile ./clientB.cnf -extensions usr_cert -CA rootB.pem -CAkey rootBkey.pem -CAcreateserial -out clientBcert.pem -days 365 ++ ++copy clientBcert.pem + rootB.pem clientB.pem ++ ++openssl x509 -subject -issuer -noout -in clientB.pem +diff --git a/tests/certs/clientB.cnf b/tests/certs/clientB.cnf +new file mode 100644 +index 0000000..7de08de +--- /dev/null ++++ b/tests/certs/clientB.cnf +@@ -0,0 +1,316 @@ ++# ++# OpenSSL example configuration file. ++# This is mostly being used for generation of certificate requests. ++# ++ ++# This definition stops the following lines choking if HOME isn't ++# defined. ++HOME = . ++RANDFILE = $ENV::HOME/.rnd ++ ++# Extra OBJECT IDENTIFIER info: ++#oid_file = $ENV::HOME/.oid ++oid_section = new_oids ++ ++# To use this configuration file with the "-extfile" option of the ++# "openssl x509" utility, name here the section containing the ++# X.509v3 extensions to use: ++# extensions = ++# (Alternatively, use a configuration file that has only ++# X.509v3 extensions in its main [= default] section.) ++ ++[ new_oids ] ++ ++# We can add new OIDs in here for use by 'ca' and 'req'. ++# Add a simple OID like this: ++# testoid1=1.2.3.4 ++# Or use config file substitution like this: ++# testoid2=${testoid1}.5.6 ++ ++#################################################################### ++[ ca ] ++default_ca = CA_default # The default ca section ++ ++#################################################################### ++[ CA_default ] ++ ++dir = ./demoCA # Where everything is kept ++certs = $dir/certs # Where the issued certs are kept ++crl_dir = $dir/crl # Where the issued crl are kept ++database = $dir/index.txt # database index file. ++#unique_subject = no # Set to 'no' to allow creation of ++ # several ctificates with same subject. ++new_certs_dir = $dir/newcerts # default place for new certs. ++ ++certificate = $dir/cacert.pem # The CA certificate ++serial = $dir/serial # The current serial number ++crlnumber = $dir/crlnumber # the current crl number ++ # must be commented out to leave a V1 CRL ++crl = $dir/crl.pem # The current CRL ++private_key = $dir/private/cakey.pem # The private key ++RANDFILE = $dir/private/.rand # private random number file ++ ++x509_extensions = usr_cert # The extensions to add to the cert ++ ++# Comment out the following two lines for the "traditional" ++# (and highly broken) format. ++name_opt = ca_default # Subject Name options ++cert_opt = ca_default # Certificate field options ++ ++# Extension copying option: use with caution. ++# copy_extensions = copy ++ ++# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs ++# so this is commented out by default to leave a V1 CRL. ++# crlnumber must also be commented out to leave a V1 CRL. ++# crl_extensions = crl_ext ++ ++default_days = 365 # how long to certify for ++default_crl_days= 30 # how long before next CRL ++default_md = sha1 # which md to use. ++preserve = no # keep passed DN ordering ++ ++# A few difference way of specifying how similar the request should look ++# For type CA, the listed attributes must be the same, and the optional ++# and supplied fields are just that :-) ++policy = policy_match ++ ++# For the CA policy ++[ policy_match ] ++countryName = match ++stateOrProvinceName = match ++organizationName = match ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++# For the 'anything' policy ++# At this point in time, you must list all acceptable 'object' ++# types. ++[ policy_anything ] ++countryName = optional ++stateOrProvinceName = optional ++localityName = optional ++organizationName = optional ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++#################################################################### ++[ req ] ++default_bits = 1024 ++default_keyfile = privkey.pem ++distinguished_name = req_distinguished_name ++attributes = req_attributes ++x509_extensions = v3_ca # The extensions to add to the self signed cert ++ ++# Passwords for private keys if not present they will be prompted for ++# input_password = secret ++# output_password = secret ++ ++# This sets a mask for permitted string types. There are several options. ++# default: PrintableString, T61String, BMPString. ++# pkix : PrintableString, BMPString. ++# utf8only: only UTF8Strings. ++# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). ++# MASK:XXXX a literal mask value. ++# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings ++# so use this option with caution! ++string_mask = nombstr ++ ++# req_extensions = v3_req # The extensions to add to a certificate request ++ ++[ req_distinguished_name ] ++countryName = Country Name (2 letter code) ++countryName_default = BR ++countryName_min = 2 ++countryName_max = 2 ++ ++stateOrProvinceName = State or Province Name (full name) ++stateOrProvinceName_default = Some-State ++stateOrProvinceName_default = Espirito Santo ++ ++localityName = Locality Name (eg, city) ++localityName_default = Santo Antonio do Canaa ++ ++0.organizationName = Organization Name (eg, company) ++0.organizationName_default = Sao Tonico Ltda ++ ++# we can do this but it is not needed normally :-) ++#1.organizationName = Second Organization Name (eg, company) ++#1.organizationName_default = World Wide Web Pty Ltd ++ ++organizationalUnitName = Organizational Unit Name (eg, section) ++organizationalUnitName_default = Department of Computer Science ++ ++commonName = Common Name (eg, YOUR name) ++commonName_default = Client B ++commonName_max = 64 ++ ++emailAddress = Email Address ++emailAddress_max = 64 ++ ++# SET-ex3 = SET extension number 3 ++ ++[ req_attributes ] ++challengePassword = A challenge password ++challengePassword_min = 4 ++challengePassword_max = 20 ++ ++unstructuredName = An optional company name ++ ++[ usr_cert ] ++ ++# These extensions are added when 'ca' signs a request. ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++[ v3_req ] ++ ++# Extensions to add to a certificate request ++ ++basicConstraints = CA:FALSE ++keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++[ v3_ca ] ++ ++ ++# Extensions for a typical CA ++ ++ ++# PKIX recommendation. ++ ++subjectKeyIdentifier=hash ++ ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++# This is what PKIX recommends but some broken software chokes on critical ++# extensions. ++#basicConstraints = critical,CA:true ++# So we do this instead. ++basicConstraints = CA:true ++ ++# Key usage: this is typical for a CA certificate. However since it will ++# prevent it being used as an test self-signed certificate it is best ++# left out by default. ++# keyUsage = cRLSign, keyCertSign ++ ++# Some might want this also ++# nsCertType = sslCA, emailCA ++ ++# Include email address in subject alt name: another PKIX recommendation ++# subjectAltName=email:copy ++# Copy issuer details ++# issuerAltName=issuer:copy ++ ++# DER hex encoding of an extension: beware experts only! ++# obj=DER:02:03 ++# Where 'obj' is a standard or added object ++# You can even override a supported extension: ++# basicConstraints= critical, DER:30:03:01:01:FF ++ ++[ crl_ext ] ++ ++# CRL extensions. ++# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. ++ ++# issuerAltName=issuer:copy ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++[ proxy_cert_ext ] ++# These extensions should be added when creating a proxy certificate ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer:always ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++# This really needs to be in place for it to be a proxy certificate. ++proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo +diff --git a/tests/certs/clientB.sh b/tests/certs/clientB.sh +new file mode 100755 +index 0000000..94f8986 +--- /dev/null ++++ b/tests/certs/clientB.sh +@@ -0,0 +1,12 @@ ++#!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout clientBkey.pem -out clientBreq.pem \ ++ -nodes -config ./clientB.cnf -days 365 -batch ++ ++openssl x509 -req -in clientBreq.pem -sha1 -extfile ./clientB.cnf \ ++ -extensions usr_cert -CA rootB.pem -CAkey rootBkey.pem -CAcreateserial \ ++ -out clientBcert.pem -days 365 ++ ++cat clientBcert.pem rootB.pem > clientB.pem ++ ++openssl x509 -subject -issuer -noout -in clientB.pem +diff --git a/tests/certs/rootA.bat b/tests/certs/rootA.bat +new file mode 100644 +index 0000000..6449bfa +--- /dev/null ++++ b/tests/certs/rootA.bat +@@ -0,0 +1,7 @@ ++REM #!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout rootAkey.pem -out rootAreq.pem -nodes -config ./rootA.cnf -days 365 -batch ++ ++openssl x509 -req -in rootAreq.pem -sha1 -extfile ./rootA.cnf -extensions v3_ca -signkey rootAkey.pem -out rootA.pem -days 365 ++ ++openssl x509 -subject -issuer -noout -in rootA.pem +diff --git a/tests/certs/rootA.cnf b/tests/certs/rootA.cnf +new file mode 100644 +index 0000000..2dc39c8 +--- /dev/null ++++ b/tests/certs/rootA.cnf +@@ -0,0 +1,315 @@ ++# ++# OpenSSL example configuration file. ++# This is mostly being used for generation of certificate requests. ++# ++ ++# This definition stops the following lines choking if HOME isn't ++# defined. ++HOME = . ++RANDFILE = $ENV::HOME/.rnd ++ ++# Extra OBJECT IDENTIFIER info: ++#oid_file = $ENV::HOME/.oid ++oid_section = new_oids ++ ++# To use this configuration file with the "-extfile" option of the ++# "openssl x509" utility, name here the section containing the ++# X.509v3 extensions to use: ++# extensions = ++# (Alternatively, use a configuration file that has only ++# X.509v3 extensions in its main [= default] section.) ++ ++[ new_oids ] ++ ++# We can add new OIDs in here for use by 'ca' and 'req'. ++# Add a simple OID like this: ++# testoid1=1.2.3.4 ++# Or use config file substitution like this: ++# testoid2=${testoid1}.5.6 ++ ++#################################################################### ++[ ca ] ++default_ca = CA_default # The default ca section ++ ++#################################################################### ++[ CA_default ] ++ ++dir = ./demoCA # Where everything is kept ++certs = $dir/certs # Where the issued certs are kept ++crl_dir = $dir/crl # Where the issued crl are kept ++database = $dir/index.txt # database index file. ++#unique_subject = no # Set to 'no' to allow creation of ++ # several ctificates with same subject. ++new_certs_dir = $dir/newcerts # default place for new certs. ++ ++certificate = $dir/cacert.pem # The CA certificate ++serial = $dir/serial # The current serial number ++crlnumber = $dir/crlnumber # the current crl number ++ # must be commented out to leave a V1 CRL ++crl = $dir/crl.pem # The current CRL ++private_key = $dir/private/cakey.pem # The private key ++RANDFILE = $dir/private/.rand # private random number file ++ ++x509_extensions = usr_cert # The extensions to add to the cert ++ ++# Comment out the following two lines for the "traditional" ++# (and highly broken) format. ++name_opt = ca_default # Subject Name options ++cert_opt = ca_default # Certificate field options ++ ++# Extension copying option: use with caution. ++# copy_extensions = copy ++ ++# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs ++# so this is commented out by default to leave a V1 CRL. ++# crlnumber must also be commented out to leave a V1 CRL. ++# crl_extensions = crl_ext ++ ++default_days = 365 # how long to certify for ++default_crl_days= 30 # how long before next CRL ++default_md = sha1 # which md to use. ++preserve = no # keep passed DN ordering ++ ++# A few difference way of specifying how similar the request should look ++# For type CA, the listed attributes must be the same, and the optional ++# and supplied fields are just that :-) ++policy = policy_match ++ ++# For the CA policy ++[ policy_match ] ++countryName = match ++stateOrProvinceName = match ++organizationName = match ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++# For the 'anything' policy ++# At this point in time, you must list all acceptable 'object' ++# types. ++[ policy_anything ] ++countryName = optional ++stateOrProvinceName = optional ++localityName = optional ++organizationName = optional ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++#################################################################### ++[ req ] ++default_bits = 1024 ++default_keyfile = privkey.pem ++distinguished_name = req_distinguished_name ++attributes = req_attributes ++x509_extensions = v3_ca # The extensions to add to the self signed cert ++ ++# Passwords for private keys if not present they will be prompted for ++# input_password = secret ++# output_password = secret ++ ++# This sets a mask for permitted string types. There are several options. ++# default: PrintableString, T61String, BMPString. ++# pkix : PrintableString, BMPString. ++# utf8only: only UTF8Strings. ++# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). ++# MASK:XXXX a literal mask value. ++# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings ++# so use this option with caution! ++string_mask = nombstr ++ ++# req_extensions = v3_req # The extensions to add to a certificate request ++ ++[ req_distinguished_name ] ++countryName = Country Name (2 letter code) ++countryName_default = BR ++countryName_min = 2 ++countryName_max = 2 ++ ++stateOrProvinceName = State or Province Name (full name) ++stateOrProvinceName_default = Espirito Santo ++ ++localityName = Locality Name (eg, city) ++localityName_default = Santo Antonio do Canaa ++ ++0.organizationName = Organization Name (eg, company) ++0.organizationName_default = Santo Tonico Ltda ++ ++# we can do this but it is not needed normally :-) ++#1.organizationName = Second Organization Name (eg, company) ++#1.organizationName_default = World Wide Web Pty Ltd ++ ++organizationalUnitName = Organizational Unit Name (eg, section) ++organizationalUnitName_default = Department of Computer Science ++ ++commonName = Common Name (eg, YOUR name) ++commonName_max = 64 ++commonName_default = Root A ++ ++emailAddress = Email Address ++emailAddress_max = 64 ++ ++# SET-ex3 = SET extension number 3 ++ ++[ req_attributes ] ++challengePassword = A challenge password ++challengePassword_min = 4 ++challengePassword_max = 20 ++ ++unstructuredName = An optional company name ++ ++[ usr_cert ] ++ ++# These extensions are added when 'ca' signs a request. ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++[ v3_req ] ++ ++# Extensions to add to a certificate request ++ ++basicConstraints = CA:FALSE ++keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++[ v3_ca ] ++ ++ ++# Extensions for a typical CA ++ ++ ++# PKIX recommendation. ++ ++subjectKeyIdentifier=hash ++ ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++# This is what PKIX recommends but some broken software chokes on critical ++# extensions. ++#basicConstraints = critical,CA:true ++# So we do this instead. ++basicConstraints = CA:true ++ ++# Key usage: this is typical for a CA certificate. However since it will ++# prevent it being used as an test self-signed certificate it is best ++# left out by default. ++# keyUsage = cRLSign, keyCertSign ++ ++# Some might want this also ++# nsCertType = sslCA, emailCA ++ ++# Include email address in subject alt name: another PKIX recommendation ++# subjectAltName=email:copy ++# Copy issuer details ++# issuerAltName=issuer:copy ++ ++# DER hex encoding of an extension: beware experts only! ++# obj=DER:02:03 ++# Where 'obj' is a standard or added object ++# You can even override a supported extension: ++# basicConstraints= critical, DER:30:03:01:01:FF ++ ++[ crl_ext ] ++ ++# CRL extensions. ++# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. ++ ++# issuerAltName=issuer:copy ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++[ proxy_cert_ext ] ++# These extensions should be added when creating a proxy certificate ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer:always ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++# This really needs to be in place for it to be a proxy certificate. ++proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo +diff --git a/tests/certs/rootA.pem b/tests/certs/rootA.pem +deleted file mode 100644 +index dac07a0..0000000 +--- a/tests/certs/rootA.pem ++++ /dev/null +@@ -1,23 +0,0 @@ +------BEGIN CERTIFICATE----- +-MIIDwjCCAyugAwIBAgIJAPN164v+usx3MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xODA3MTYxOTQxNThaFw0xOTA3MTYxOTQxNThaMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7uDRKW+129vq6WZX +-txSS69znx2+0NjWpamrw/DRKNdjqqBlW9vBuk2FfVv2B60kdQuK18djUCZYpxaqu +-zq3dTEYbYuVI5pd5KzNT5eaz5l46BKGojq4nw8wyocucQVaRXFLyNZ2884LikkEr +-8hG6MDu6kz/2fEoHizRUyBD0U7ECAwEAAaOCAQYwggECMB0GA1UdDgQWBBSai0wQ +-3U5MqLu4pw7YG+aemj9hJTCB0gYDVR0jBIHKMIHHgBSai0wQ3U5MqLu4pw7YG+ae +-mj9hJaGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh +-bnRvMR8wHQYDVQQHExZTYW50byBBbnRvbmlvIGRvIENhbmFhMRowGAYDVQQKExFT +-YW50byBUb25pY28gTHRkYTEnMCUGA1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRl +-ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDzdeuL/rrMdzAMBgNVHRMEBTAD +-AQH/MA0GCSqGSIb3DQEBBQUAA4GBACWoQT4vih0r11WXU+k9OngkaZEYqjIh8V2A +-RwnsZBRJulKzPnLuZgmfXLUlj/0bTrWXA5ARBxm6Zb6Mw8uURt+qO5jxFu32LL5Z +-0b/yS+gemnVefIq6VGBiqskvKDuX6UAqr4bKCJMs+imQwjzU64Oe0xXeMVazAXeA +-234dl4Tu +------END CERTIFICATE----- +diff --git a/tests/certs/rootA.sh b/tests/certs/rootA.sh +new file mode 100755 +index 0000000..7b588bf +--- /dev/null ++++ b/tests/certs/rootA.sh +@@ -0,0 +1,7 @@ ++#!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout rootAkey.pem -out rootAreq.pem -nodes -config ./rootA.cnf -days 365 -batch ++ ++openssl x509 -req -in rootAreq.pem -sha1 -extfile ./rootA.cnf -extensions v3_ca -signkey rootAkey.pem -out rootA.pem -days 365 ++ ++openssl x509 -subject -issuer -noout -in rootA.pem +diff --git a/tests/certs/rootAkey.pem b/tests/certs/rootAkey.pem +deleted file mode 100644 +index 987a73e..0000000 +--- a/tests/certs/rootAkey.pem ++++ /dev/null +@@ -1,16 +0,0 @@ +------BEGIN PRIVATE KEY----- +-MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAO7g0Slvtdvb6ulm +-V7cUkuvc58dvtDY1qWpq8Pw0SjXY6qgZVvbwbpNhX1b9getJHULitfHY1AmWKcWq +-rs6t3UxGG2LlSOaXeSszU+Xms+ZeOgShqI6uJ8PMMqHLnEFWkVxS8jWdvPOC4pJB +-K/IRujA7upM/9nxKB4s0VMgQ9FOxAgMBAAECgYEAlboIoEZK4PHpPj5NwI1+waQH +-C3Syqj/cXr2FKy/DTBkYjCDF56YwSOSBk872PfnoA2KC1IIp9ZBPwnwHcbh8ufo9 +-vZP0rEpjSV5B7d81uoMOt4YaS1UOxv8GQCO3r+5dj/L/CVYsj13W1MaozYVmvTiW +-md7Rz+N4JjHWYu60EqECQQD4SHAXsEJfi+cbadV5/+HTmiqoH3cUYnK34BNs4ulo +-D+3QGIiaslyde97D+08EbVWWdyWcGwoSft0CJG4Gim09AkEA9k2L4GP6qa1Afn+I +-YmkMRtyo/4taCc9QBWuNRfvd1UTarvrA4nLKyBjL9Y7walFv3q/DaLrCyg/Bg/ZQ +-aV8PhQJBAJuRh+rP3kbP+ncK0WAoHO/hYWkGji6PoSHlnUZUx7sUgAYr2SxVJgLn +-YqWaCeDUQRSOg1pU9vKv2vtEqEwg4GECQE1uRYoOhE/xWnQqLbsaYTSpzCtCKNUq +-qnJ5xFj6/Fs+oS0fQaIvClbrjLsu65/Q6EVuphT3maMiXujYd6EYtG0CQHYvVroh +-2jzj0VZaoWEIJgMXjV8+UVpP5cQMHltSZtzuQITKmAAEhcqXm26W940sRfMGRgrw +-u0M3347nbXdYj8c= +------END PRIVATE KEY----- +diff --git a/tests/certs/rootAreq.pem b/tests/certs/rootAreq.pem +deleted file mode 100644 +index 8d66597..0000000 +--- a/tests/certs/rootAreq.pem ++++ /dev/null +@@ -1,13 +0,0 @@ +------BEGIN CERTIFICATE REQUEST----- +-MIIB3jCCAUcCAQAwgZ0xCzAJBgNVBAYTAkJSMRcwFQYDVQQIEw5Fc3Bpcml0byBT +-YW50bzEfMB0GA1UEBxMWU2FudG8gQW50b25pbyBkbyBDYW5hYTEaMBgGA1UEChMR +-U2FudG8gVG9uaWNvIEx0ZGExJzAlBgNVBAsTHkRlcGFydG1lbnQgb2YgQ29tcHV0 +-ZXIgU2NpZW5jZTEPMA0GA1UEAxMGUm9vdCBBMIGfMA0GCSqGSIb3DQEBAQUAA4GN +-ADCBiQKBgQDu4NEpb7Xb2+rpZle3FJLr3OfHb7Q2NalqavD8NEo12OqoGVb28G6T +-YV9W/YHrSR1C4rXx2NQJlinFqq7Ord1MRhti5Ujml3krM1Pl5rPmXjoEoaiOrifD +-zDKhy5xBVpFcUvI1nbzzguKSQSvyEbowO7qTP/Z8SgeLNFTIEPRTsQIDAQABoAAw +-DQYJKoZIhvcNAQEFBQADgYEA2QCr5Q66xJoE+CTbvhhneLCvpjU+KBIKOAQ28s3f +-RfFMXvO4UOXdB+NU06hQDkeYZbACeikw/5Cl+Q2O5Kx57LteW+AWvP9T2Bvh9WnJ +-fgjm+GArxuVSb2r9KwAF8Cn6r8O09L0C75hmQTVU+rjBghZ1lsl0dVtdn+ueoVHj +-MKo= +------END CERTIFICATE REQUEST----- +diff --git a/tests/certs/rootB.bat b/tests/certs/rootB.bat +new file mode 100644 +index 0000000..99f358a +--- /dev/null ++++ b/tests/certs/rootB.bat +@@ -0,0 +1,7 @@ ++rem #!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout rootBkey.pem -out rootBreq.pem -nodes -config ./rootB.cnf -days 365 -batch ++ ++openssl x509 -req -in rootBreq.pem -sha1 -extfile ./rootB.cnf -extensions v3_ca -signkey rootBkey.pem -out rootB.pem -days 365 ++ ++openssl x509 -subject -issuer -noout -in rootB.pem +diff --git a/tests/certs/rootB.cnf b/tests/certs/rootB.cnf +new file mode 100644 +index 0000000..ee45752 +--- /dev/null ++++ b/tests/certs/rootB.cnf +@@ -0,0 +1,315 @@ ++# ++# OpenSSL example configuration file. ++# This is mostly being used for generation of certificate requests. ++# ++ ++# This definition stops the following lines choking if HOME isn't ++# defined. ++HOME = . ++RANDFILE = $ENV::HOME/.rnd ++ ++# Extra OBJECT IDENTIFIER info: ++#oid_file = $ENV::HOME/.oid ++oid_section = new_oids ++ ++# To use this configuration file with the "-extfile" option of the ++# "openssl x509" utility, name here the section containing the ++# X.509v3 extensions to use: ++# extensions = ++# (Alternatively, use a configuration file that has only ++# X.509v3 extensions in its main [= default] section.) ++ ++[ new_oids ] ++ ++# We can add new OIDs in here for use by 'ca' and 'req'. ++# Add a simple OID like this: ++# testoid1=1.2.3.4 ++# Or use config file substitution like this: ++# testoid2=${testoid1}.5.6 ++ ++#################################################################### ++[ ca ] ++default_ca = CA_default # The default ca section ++ ++#################################################################### ++[ CA_default ] ++ ++dir = ./demoCA # Where everything is kept ++certs = $dir/certs # Where the issued certs are kept ++crl_dir = $dir/crl # Where the issued crl are kept ++database = $dir/index.txt # database index file. ++#unique_subject = no # Set to 'no' to allow creation of ++ # several ctificates with same subject. ++new_certs_dir = $dir/newcerts # default place for new certs. ++ ++certificate = $dir/cacert.pem # The CA certificate ++serial = $dir/serial # The current serial number ++crlnumber = $dir/crlnumber # the current crl number ++ # must be commented out to leave a V1 CRL ++crl = $dir/crl.pem # The current CRL ++private_key = $dir/private/cakey.pem # The private key ++RANDFILE = $dir/private/.rand # private random number file ++ ++x509_extensions = usr_cert # The extensions to add to the cert ++ ++# Comment out the following two lines for the "traditional" ++# (and highly broken) format. ++name_opt = ca_default # Subject Name options ++cert_opt = ca_default # Certificate field options ++ ++# Extension copying option: use with caution. ++# copy_extensions = copy ++ ++# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs ++# so this is commented out by default to leave a V1 CRL. ++# crlnumber must also be commented out to leave a V1 CRL. ++# crl_extensions = crl_ext ++ ++default_days = 365 # how long to certify for ++default_crl_days= 30 # how long before next CRL ++default_md = sha1 # which md to use. ++preserve = no # keep passed DN ordering ++ ++# A few difference way of specifying how similar the request should look ++# For type CA, the listed attributes must be the same, and the optional ++# and supplied fields are just that :-) ++policy = policy_match ++ ++# For the CA policy ++[ policy_match ] ++countryName = match ++stateOrProvinceName = match ++organizationName = match ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++# For the 'anything' policy ++# At this point in time, you must list all acceptable 'object' ++# types. ++[ policy_anything ] ++countryName = optional ++stateOrProvinceName = optional ++localityName = optional ++organizationName = optional ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++#################################################################### ++[ req ] ++default_bits = 1024 ++default_keyfile = privkey.pem ++distinguished_name = req_distinguished_name ++attributes = req_attributes ++x509_extensions = v3_ca # The extensions to add to the self signed cert ++ ++# Passwords for private keys if not present they will be prompted for ++# input_password = secret ++# output_password = secret ++ ++# This sets a mask for permitted string types. There are several options. ++# default: PrintableString, T61String, BMPString. ++# pkix : PrintableString, BMPString. ++# utf8only: only UTF8Strings. ++# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). ++# MASK:XXXX a literal mask value. ++# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings ++# so use this option with caution! ++string_mask = nombstr ++ ++# req_extensions = v3_req # The extensions to add to a certificate request ++ ++[ req_distinguished_name ] ++countryName = Country Name (2 letter code) ++countryName_default = BR ++countryName_min = 2 ++countryName_max = 2 ++ ++stateOrProvinceName = State or Province Name (full name) ++stateOrProvinceName_default = Espirito Santo ++ ++localityName = Locality Name (eg, city) ++localityName_default = Santo Antonio do Canaa ++ ++0.organizationName = Organization Name (eg, company) ++0.organizationName_default = Sao Tonico Ltda ++ ++# we can do this but it is not needed normally :-) ++#1.organizationName = Second Organization Name (eg, company) ++#1.organizationName_default = World Wide Web Pty Ltd ++ ++organizationalUnitName = Organizational Unit Name (eg, section) ++organizationalUnitName_default = Department of Computer Science ++ ++commonName = Common Name (eg, YOUR name) ++commonName_default = Root B ++commonName_max = 64 ++ ++emailAddress = Email Address ++emailAddress_max = 64 ++ ++# SET-ex3 = SET extension number 3 ++ ++[ req_attributes ] ++challengePassword = A challenge password ++challengePassword_min = 4 ++challengePassword_max = 20 ++ ++unstructuredName = An optional company name ++ ++[ usr_cert ] ++ ++# These extensions are added when 'ca' signs a request. ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++[ v3_req ] ++ ++# Extensions to add to a certificate request ++ ++basicConstraints = CA:FALSE ++keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++[ v3_ca ] ++ ++ ++# Extensions for a typical CA ++ ++ ++# PKIX recommendation. ++ ++subjectKeyIdentifier=hash ++ ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++# This is what PKIX recommends but some broken software chokes on critical ++# extensions. ++#basicConstraints = critical,CA:true ++# So we do this instead. ++basicConstraints = CA:true ++ ++# Key usage: this is typical for a CA certificate. However since it will ++# prevent it being used as an test self-signed certificate it is best ++# left out by default. ++# keyUsage = cRLSign, keyCertSign ++ ++# Some might want this also ++# nsCertType = sslCA, emailCA ++ ++# Include email address in subject alt name: another PKIX recommendation ++# subjectAltName=email:copy ++# Copy issuer details ++# issuerAltName=issuer:copy ++ ++# DER hex encoding of an extension: beware experts only! ++# obj=DER:02:03 ++# Where 'obj' is a standard or added object ++# You can even override a supported extension: ++# basicConstraints= critical, DER:30:03:01:01:FF ++ ++[ crl_ext ] ++ ++# CRL extensions. ++# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. ++ ++# issuerAltName=issuer:copy ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++[ proxy_cert_ext ] ++# These extensions should be added when creating a proxy certificate ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer:always ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++# This really needs to be in place for it to be a proxy certificate. ++proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo +diff --git a/tests/certs/rootB.sh b/tests/certs/rootB.sh +new file mode 100755 +index 0000000..53969b3 +--- /dev/null ++++ b/tests/certs/rootB.sh +@@ -0,0 +1,7 @@ ++#!/bin/sh ++ ++openssl req -newkey rsa:1024 -sha1 -keyout rootBkey.pem -out rootBreq.pem -nodes -config ./rootB.cnf -days 365 -batch ++ ++openssl x509 -req -in rootBreq.pem -sha1 -extfile ./rootB.cnf -extensions v3_ca -signkey rootBkey.pem -out rootB.pem -days 365 ++ ++openssl x509 -subject -issuer -noout -in rootB.pem +diff --git a/tests/certs/serverA.bat b/tests/certs/serverA.bat +new file mode 100644 +index 0000000..78934d5 +--- /dev/null ++++ b/tests/certs/serverA.bat +@@ -0,0 +1,9 @@ ++rem #!/bin/sh ++ ++openssl req -newkey rsa:1024 -keyout serverAkey.pem -out serverAreq.pem -config ./serverA.cnf -nodes -days 365 -batch ++ ++openssl x509 -req -in serverAreq.pem -sha1 -extfile ./serverA.cnf -extensions usr_cert -CA rootA.pem -CAkey rootAkey.pem -CAcreateserial -out serverAcert.pem -days 365 ++ ++copy serverAcert.pem + rootA.pem serverA.pem ++ ++openssl x509 -subject -issuer -noout -in serverA.pem +diff --git a/tests/certs/serverA.cnf b/tests/certs/serverA.cnf +new file mode 100644 +index 0000000..b9c736f +--- /dev/null ++++ b/tests/certs/serverA.cnf +@@ -0,0 +1,316 @@ ++# ++# OpenSSL example configuration file. ++# This is mostly being used for generation of certificate requests. ++# ++ ++# This definition stops the following lines choking if HOME isn't ++# defined. ++HOME = . ++RANDFILE = $ENV::HOME/.rnd ++ ++# Extra OBJECT IDENTIFIER info: ++#oid_file = $ENV::HOME/.oid ++oid_section = new_oids ++ ++# To use this configuration file with the "-extfile" option of the ++# "openssl x509" utility, name here the section containing the ++# X.509v3 extensions to use: ++# extensions = ++# (Alternatively, use a configuration file that has only ++# X.509v3 extensions in its main [= default] section.) ++ ++[ new_oids ] ++ ++# We can add new OIDs in here for use by 'ca' and 'req'. ++# Add a simple OID like this: ++# testoid1=1.2.3.4 ++# Or use config file substitution like this: ++# testoid2=${testoid1}.5.6 ++ ++#################################################################### ++[ ca ] ++default_ca = CA_default # The default ca section ++ ++#################################################################### ++[ CA_default ] ++ ++dir = ./demoCA # Where everything is kept ++certs = $dir/certs # Where the issued certs are kept ++crl_dir = $dir/crl # Where the issued crl are kept ++database = $dir/index.txt # database index file. ++#unique_subject = no # Set to 'no' to allow creation of ++ # several ctificates with same subject. ++new_certs_dir = $dir/newcerts # default place for new certs. ++ ++certificate = $dir/cacert.pem # The CA certificate ++serial = $dir/serial # The current serial number ++crlnumber = $dir/crlnumber # the current crl number ++ # must be commented out to leave a V1 CRL ++crl = $dir/crl.pem # The current CRL ++private_key = $dir/private/cakey.pem # The private key ++RANDFILE = $dir/private/.rand # private random number file ++ ++x509_extensions = usr_cert # The extensions to add to the cert ++ ++# Comment out the following two lines for the "traditional" ++# (and highly broken) format. ++name_opt = ca_default # Subject Name options ++cert_opt = ca_default # Certificate field options ++ ++# Extension copying option: use with caution. ++# copy_extensions = copy ++ ++# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs ++# so this is commented out by default to leave a V1 CRL. ++# crlnumber must also be commented out to leave a V1 CRL. ++# crl_extensions = crl_ext ++ ++default_days = 365 # how long to certify for ++default_crl_days= 30 # how long before next CRL ++default_md = sha1 # which md to use. ++preserve = no # keep passed DN ordering ++ ++# A few difference way of specifying how similar the request should look ++# For type CA, the listed attributes must be the same, and the optional ++# and supplied fields are just that :-) ++policy = policy_match ++ ++# For the CA policy ++[ policy_match ] ++countryName = match ++stateOrProvinceName = match ++organizationName = match ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++# For the 'anything' policy ++# At this point in time, you must list all acceptable 'object' ++# types. ++[ policy_anything ] ++countryName = optional ++stateOrProvinceName = optional ++localityName = optional ++organizationName = optional ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++#################################################################### ++[ req ] ++default_bits = 1024 ++default_keyfile = privkey.pem ++distinguished_name = req_distinguished_name ++attributes = req_attributes ++x509_extensions = v3_ca # The extensions to add to the self signed cert ++ ++# Passwords for private keys if not present they will be prompted for ++# input_password = secret ++# output_password = secret ++ ++# This sets a mask for permitted string types. There are several options. ++# default: PrintableString, T61String, BMPString. ++# pkix : PrintableString, BMPString. ++# utf8only: only UTF8Strings. ++# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). ++# MASK:XXXX a literal mask value. ++# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings ++# so use this option with caution! ++string_mask = nombstr ++ ++# req_extensions = v3_req # The extensions to add to a certificate request ++ ++[ req_distinguished_name ] ++countryName = Country Name (2 letter code) ++countryName_default = BR ++countryName_min = 2 ++countryName_max = 2 ++ ++stateOrProvinceName = State or Province Name (full name) ++stateOrProvinceName_default = Some-State ++stateOrProvinceName_default = Espirito Santo ++ ++localityName = Locality Name (eg, city) ++localityName_default = Santo Antonio do Canaa ++ ++0.organizationName = Organization Name (eg, company) ++0.organizationName_default = Sao Tonico Ltda ++ ++# we can do this but it is not needed normally :-) ++#1.organizationName = Second Organization Name (eg, company) ++#1.organizationName_default = World Wide Web Pty Ltd ++ ++organizationalUnitName = Organizational Unit Name (eg, section) ++organizationalUnitName_default = Department of Computer Science ++ ++commonName = Common Name (eg, YOUR name) ++commonName_default = Server A ++commonName_max = 64 ++ ++emailAddress = Email Address ++emailAddress_max = 64 ++ ++# SET-ex3 = SET extension number 3 ++ ++[ req_attributes ] ++challengePassword = A challenge password ++challengePassword_min = 4 ++challengePassword_max = 20 ++ ++unstructuredName = An optional company name ++ ++[ usr_cert ] ++ ++# These extensions are added when 'ca' signs a request. ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++[ v3_req ] ++ ++# Extensions to add to a certificate request ++ ++basicConstraints = CA:FALSE ++keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++[ v3_ca ] ++ ++ ++# Extensions for a typical CA ++ ++ ++# PKIX recommendation. ++ ++subjectKeyIdentifier=hash ++ ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++# This is what PKIX recommends but some broken software chokes on critical ++# extensions. ++#basicConstraints = critical,CA:true ++# So we do this instead. ++basicConstraints = CA:true ++ ++# Key usage: this is typical for a CA certificate. However since it will ++# prevent it being used as an test self-signed certificate it is best ++# left out by default. ++# keyUsage = cRLSign, keyCertSign ++ ++# Some might want this also ++# nsCertType = sslCA, emailCA ++ ++# Include email address in subject alt name: another PKIX recommendation ++# subjectAltName=email:copy ++# Copy issuer details ++# issuerAltName=issuer:copy ++ ++# DER hex encoding of an extension: beware experts only! ++# obj=DER:02:03 ++# Where 'obj' is a standard or added object ++# You can even override a supported extension: ++# basicConstraints= critical, DER:30:03:01:01:FF ++ ++[ crl_ext ] ++ ++# CRL extensions. ++# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. ++ ++# issuerAltName=issuer:copy ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++[ proxy_cert_ext ] ++# These extensions should be added when creating a proxy certificate ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer:always ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++# This really needs to be in place for it to be a proxy certificate. ++proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo +diff --git a/tests/certs/serverA.pem b/tests/certs/serverA.pem +deleted file mode 100644 +index 02324d0..0000000 +--- a/tests/certs/serverA.pem ++++ /dev/null +@@ -1,43 +0,0 @@ +------BEGIN CERTIFICATE----- +-MIIDSjCCArOgAwIBAgIJANemCVlJDxN8MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xODA3MTYxOTQyMjNaFw0xOTA3MTYxOTQyMjNaMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG +-A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhT +-ZXJ2ZXIgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo41QhH/YvQQA/wzv +-uPayMbSReq0LghCvSAFXPfeRLMEBoYA+hiF+HqByKRG/SRY1hZkTY1GrNn3XT5Gd +-Dy0IyKXqZXsMAP9gKOe3meWpPdM5ibsenQywjfJJQJDDKRL4oS12Ir5vgu4lvQOU +-L39S9P7W0YEhTK0Cw5PRnEZss2UCAwEAAaOBjzCBjDAJBgNVHRMEAjAAMBEGCWCG +-SAGG+EIBAQQEAwIGQDAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg +-Q2VydGlmaWNhdGUwHQYDVR0OBBYEFIXCp7y4eaLeSSst0Yy7wFZ/dmS5MB8GA1Ud +-IwQYMBaAFJqLTBDdTkyou7inDtgb5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBACN0 +-hei2KY0AYe+TrwYq3UfyyskhNT7L48makxs/qHArXZCDf2BTctmY+95Nfgpj5kLi +-oW+e/Wu92cbor/UJAYQ0cJYLNa4k55loL6hjm2PKo2eni3NEk6SxHRQFtuVowCtF +-Kgbi29DkkQc7WRWDy2blZiIYb1oUOlktk1vp8CxY +------END CERTIFICATE----- +------BEGIN CERTIFICATE----- +-MIIDwjCCAyugAwIBAgIJAPN164v+usx3MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xODA3MTYxOTQxNThaFw0xOTA3MTYxOTQxNThaMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7uDRKW+129vq6WZX +-txSS69znx2+0NjWpamrw/DRKNdjqqBlW9vBuk2FfVv2B60kdQuK18djUCZYpxaqu +-zq3dTEYbYuVI5pd5KzNT5eaz5l46BKGojq4nw8wyocucQVaRXFLyNZ2884LikkEr +-8hG6MDu6kz/2fEoHizRUyBD0U7ECAwEAAaOCAQYwggECMB0GA1UdDgQWBBSai0wQ +-3U5MqLu4pw7YG+aemj9hJTCB0gYDVR0jBIHKMIHHgBSai0wQ3U5MqLu4pw7YG+ae +-mj9hJaGBo6SBoDCBnTELMAkGA1UEBhMCQlIxFzAVBgNVBAgTDkVzcGlyaXRvIFNh +-bnRvMR8wHQYDVQQHExZTYW50byBBbnRvbmlvIGRvIENhbmFhMRowGAYDVQQKExFT +-YW50byBUb25pY28gTHRkYTEnMCUGA1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRl +-ciBTY2llbmNlMQ8wDQYDVQQDEwZSb290IEGCCQDzdeuL/rrMdzAMBgNVHRMEBTAD +-AQH/MA0GCSqGSIb3DQEBBQUAA4GBACWoQT4vih0r11WXU+k9OngkaZEYqjIh8V2A +-RwnsZBRJulKzPnLuZgmfXLUlj/0bTrWXA5ARBxm6Zb6Mw8uURt+qO5jxFu32LL5Z +-0b/yS+gemnVefIq6VGBiqskvKDuX6UAqr4bKCJMs+imQwjzU64Oe0xXeMVazAXeA +-234dl4Tu +------END CERTIFICATE----- +diff --git a/tests/certs/serverA.sh b/tests/certs/serverA.sh +new file mode 100755 +index 0000000..7fa04e0 +--- /dev/null ++++ b/tests/certs/serverA.sh +@@ -0,0 +1,12 @@ ++#!/bin/sh ++ ++openssl req -newkey rsa:1024 -keyout serverAkey.pem -out serverAreq.pem \ ++ -config ./serverA.cnf -nodes -days 365 -batch ++ ++openssl x509 -req -in serverAreq.pem -sha1 -extfile ./serverA.cnf \ ++ -extensions usr_cert -CA rootA.pem -CAkey rootAkey.pem -CAcreateserial \ ++ -out serverAcert.pem -days 365 ++ ++cat serverAcert.pem rootA.pem > serverA.pem ++ ++openssl x509 -subject -issuer -noout -in serverA.pem +diff --git a/tests/certs/serverAcert.pem b/tests/certs/serverAcert.pem +deleted file mode 100644 +index 72d2c87..0000000 +--- a/tests/certs/serverAcert.pem ++++ /dev/null +@@ -1,20 +0,0 @@ +------BEGIN CERTIFICATE----- +-MIIDSjCCArOgAwIBAgIJANemCVlJDxN8MA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGjAYBgNVBAoTEVNhbnRvIFRvbmljbyBMdGRhMScw +-JQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxDzANBgNVBAMT +-BlJvb3QgQTAeFw0xODA3MTYxOTQyMjNaFw0xOTA3MTYxOTQyMjNaMIGdMQswCQYD +-VQQGEwJCUjEXMBUGA1UECBMORXNwaXJpdG8gU2FudG8xHzAdBgNVBAcTFlNhbnRv +-IEFudG9uaW8gZG8gQ2FuYWExGDAWBgNVBAoTD1NhbyBUb25pY28gTHRkYTEnMCUG +-A1UECxMeRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlMREwDwYDVQQDEwhT +-ZXJ2ZXIgQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo41QhH/YvQQA/wzv +-uPayMbSReq0LghCvSAFXPfeRLMEBoYA+hiF+HqByKRG/SRY1hZkTY1GrNn3XT5Gd +-Dy0IyKXqZXsMAP9gKOe3meWpPdM5ibsenQywjfJJQJDDKRL4oS12Ir5vgu4lvQOU +-L39S9P7W0YEhTK0Cw5PRnEZss2UCAwEAAaOBjzCBjDAJBgNVHRMEAjAAMBEGCWCG +-SAGG+EIBAQQEAwIGQDAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg +-Q2VydGlmaWNhdGUwHQYDVR0OBBYEFIXCp7y4eaLeSSst0Yy7wFZ/dmS5MB8GA1Ud +-IwQYMBaAFJqLTBDdTkyou7inDtgb5p6aP2ElMA0GCSqGSIb3DQEBBQUAA4GBACN0 +-hei2KY0AYe+TrwYq3UfyyskhNT7L48makxs/qHArXZCDf2BTctmY+95Nfgpj5kLi +-oW+e/Wu92cbor/UJAYQ0cJYLNa4k55loL6hjm2PKo2eni3NEk6SxHRQFtuVowCtF +-Kgbi29DkkQc7WRWDy2blZiIYb1oUOlktk1vp8CxY +------END CERTIFICATE----- +diff --git a/tests/certs/serverAkey.pem b/tests/certs/serverAkey.pem +deleted file mode 100644 +index c9f6b65..0000000 +--- a/tests/certs/serverAkey.pem ++++ /dev/null +@@ -1,16 +0,0 @@ +------BEGIN PRIVATE KEY----- +-MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKONUIR/2L0EAP8M +-77j2sjG0kXqtC4IQr0gBVz33kSzBAaGAPoYhfh6gcikRv0kWNYWZE2NRqzZ910+R +-nQ8tCMil6mV7DAD/YCjnt5nlqT3TOYm7Hp0MsI3ySUCQwykS+KEtdiK+b4LuJb0D +-lC9/UvT+1tGBIUytAsOT0ZxGbLNlAgMBAAECgYBcMPYoGiDEOxOMsXAXpQfBOPWg +-XxbTlDAZuJfC2GA/B/SxYqbb2NlMzkhLmjNnMVuuGSFypMCMENdjhMMxoMMH4HZ8 +-XFsecHE9OS2KrkNQJ7OxIa9RRtGwtm8QdVav2YsQQHwoG9qB4Q+vKTyUkofIEH86 +-bV2aX7lpY7b2E8jZgQJBANcJO2+GmTOKlV0KFWtvL7x+mULJCkrpLDHEPMyFCyQT +-xkzWJ8ZeL0l0r8gbF91ykO2mnjm2X2pHC9XU6lkIDRUCQQDCtVWnvGF+QCwsmAIo +-RnTZtSd0jCjQQWCA+ZvqAIRMXtIQ3gL60kuYCnVMIk4XvF2iZltpgxJsPoCysGnW +-q8ERAkBHq4EOy8q1/gOITfsToqxDY+KK+tyeWRbsw14MQG+VJ64ZH+uD1xJlpimM +-RVNv8GZTfwwPajRlBKbyLxOoduF9AkEAuzBWXuJO4G+ViHHDcTD7Weo9OmEdQ8n2 +-m0hdysQgbMOkNS8bskPHBS7Ywg8hANTJOD4rl+65IXOdiyzrM8T/4QJBAMzV6Bkz +-uQYRFULqLjQnaS3wOyJtoPZChWBsKaJO8WJSp+zB5Fk75cmFkLdrkKdmf0zxZX9h +-sbvrkWGXdyBD9y8= +------END PRIVATE KEY----- +diff --git a/tests/certs/serverAreq.pem b/tests/certs/serverAreq.pem +deleted file mode 100644 +index bf93f3f..0000000 +--- a/tests/certs/serverAreq.pem ++++ /dev/null +@@ -1,13 +0,0 @@ +------BEGIN CERTIFICATE REQUEST----- +-MIIB3jCCAUcCAQAwgZ0xCzAJBgNVBAYTAkJSMRcwFQYDVQQIEw5Fc3Bpcml0byBT +-YW50bzEfMB0GA1UEBxMWU2FudG8gQW50b25pbyBkbyBDYW5hYTEYMBYGA1UEChMP +-U2FvIFRvbmljbyBMdGRhMScwJQYDVQQLEx5EZXBhcnRtZW50IG9mIENvbXB1dGVy +-IFNjaWVuY2UxETAPBgNVBAMTCFNlcnZlciBBMIGfMA0GCSqGSIb3DQEBAQUAA4GN +-ADCBiQKBgQCjjVCEf9i9BAD/DO+49rIxtJF6rQuCEK9IAVc995EswQGhgD6GIX4e +-oHIpEb9JFjWFmRNjUas2fddPkZ0PLQjIpeplewwA/2Ao57eZ5ak90zmJux6dDLCN +-8klAkMMpEvihLXYivm+C7iW9A5Qvf1L0/tbRgSFMrQLDk9GcRmyzZQIDAQABoAAw +-DQYJKoZIhvcNAQELBQADgYEAFGv0sHAVvqDtEbW0afiFeuWwJqBf4lz+xNZt1x2I +-qrxDX9iZ/EiIZNXubPZLsOAnYE9+BcfJ0tGC2p9b6+EmmtkwxytIlbaVAtleHTt2 +-f0xr27k4YqIIrB63N8seaawOtQebyq76BHBSpoRHnzrfelnrkTqH+yR4Ldee7mJA +-9mY= +------END CERTIFICATE REQUEST----- +diff --git a/tests/certs/serverB.bat b/tests/certs/serverB.bat +new file mode 100644 +index 0000000..294be57 +--- /dev/null ++++ b/tests/certs/serverB.bat +@@ -0,0 +1,9 @@ ++rem #!/bin/sh ++ ++openssl req -newkey rsa:1024 -keyout serverBkey.pem -out serverBreq.pem -config ./serverB.cnf -nodes -days 365 -batch ++ ++openssl x509 -req -in serverBreq.pem -sha1 -extfile ./serverB.cnf -extensions usr_cert -CA rootB.pem -CAkey rootBkey.pem -CAcreateserial -out serverBcert.pem -days 365 ++ ++copy serverBcert.pem + rootB.pem serverB.pem ++ ++openssl x509 -subject -issuer -noout -in serverB.pem +diff --git a/tests/certs/serverB.cnf b/tests/certs/serverB.cnf +new file mode 100644 +index 0000000..ec5d031 +--- /dev/null ++++ b/tests/certs/serverB.cnf +@@ -0,0 +1,316 @@ ++# ++# OpenSSL example configuration file. ++# This is mostly being used for generation of certificate requests. ++# ++ ++# This definition stops the following lines choking if HOME isn't ++# defined. ++HOME = . ++RANDFILE = $ENV::HOME/.rnd ++ ++# Extra OBJECT IDENTIFIER info: ++#oid_file = $ENV::HOME/.oid ++oid_section = new_oids ++ ++# To use this configuration file with the "-extfile" option of the ++# "openssl x509" utility, name here the section containing the ++# X.509v3 extensions to use: ++# extensions = ++# (Alternatively, use a configuration file that has only ++# X.509v3 extensions in its main [= default] section.) ++ ++[ new_oids ] ++ ++# We can add new OIDs in here for use by 'ca' and 'req'. ++# Add a simple OID like this: ++# testoid1=1.2.3.4 ++# Or use config file substitution like this: ++# testoid2=${testoid1}.5.6 ++ ++#################################################################### ++[ ca ] ++default_ca = CA_default # The default ca section ++ ++#################################################################### ++[ CA_default ] ++ ++dir = ./demoCA # Where everything is kept ++certs = $dir/certs # Where the issued certs are kept ++crl_dir = $dir/crl # Where the issued crl are kept ++database = $dir/index.txt # database index file. ++#unique_subject = no # Set to 'no' to allow creation of ++ # several ctificates with same subject. ++new_certs_dir = $dir/newcerts # default place for new certs. ++ ++certificate = $dir/cacert.pem # The CA certificate ++serial = $dir/serial # The current serial number ++crlnumber = $dir/crlnumber # the current crl number ++ # must be commented out to leave a V1 CRL ++crl = $dir/crl.pem # The current CRL ++private_key = $dir/private/cakey.pem # The private key ++RANDFILE = $dir/private/.rand # private random number file ++ ++x509_extensions = usr_cert # The extensions to add to the cert ++ ++# Comment out the following two lines for the "traditional" ++# (and highly broken) format. ++name_opt = ca_default # Subject Name options ++cert_opt = ca_default # Certificate field options ++ ++# Extension copying option: use with caution. ++# copy_extensions = copy ++ ++# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs ++# so this is commented out by default to leave a V1 CRL. ++# crlnumber must also be commented out to leave a V1 CRL. ++# crl_extensions = crl_ext ++ ++default_days = 365 # how long to certify for ++default_crl_days= 30 # how long before next CRL ++default_md = sha1 # which md to use. ++preserve = no # keep passed DN ordering ++ ++# A few difference way of specifying how similar the request should look ++# For type CA, the listed attributes must be the same, and the optional ++# and supplied fields are just that :-) ++policy = policy_match ++ ++# For the CA policy ++[ policy_match ] ++countryName = match ++stateOrProvinceName = match ++organizationName = match ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++# For the 'anything' policy ++# At this point in time, you must list all acceptable 'object' ++# types. ++[ policy_anything ] ++countryName = optional ++stateOrProvinceName = optional ++localityName = optional ++organizationName = optional ++organizationalUnitName = optional ++commonName = supplied ++emailAddress = optional ++ ++#################################################################### ++[ req ] ++default_bits = 1024 ++default_keyfile = privkey.pem ++distinguished_name = req_distinguished_name ++attributes = req_attributes ++x509_extensions = v3_ca # The extensions to add to the self signed cert ++ ++# Passwords for private keys if not present they will be prompted for ++# input_password = secret ++# output_password = secret ++ ++# This sets a mask for permitted string types. There are several options. ++# default: PrintableString, T61String, BMPString. ++# pkix : PrintableString, BMPString. ++# utf8only: only UTF8Strings. ++# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). ++# MASK:XXXX a literal mask value. ++# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings ++# so use this option with caution! ++string_mask = nombstr ++ ++# req_extensions = v3_req # The extensions to add to a certificate request ++ ++[ req_distinguished_name ] ++countryName = Country Name (2 letter code) ++countryName_default = BR ++countryName_min = 2 ++countryName_max = 2 ++ ++stateOrProvinceName = State or Province Name (full name) ++stateOrProvinceName_default = Some-State ++stateOrProvinceName_default = Espirito Santo ++ ++localityName = Locality Name (eg, city) ++localityName_default = Santo Antonio do Canaa ++ ++0.organizationName = Organization Name (eg, company) ++0.organizationName_default = Sao Tonico Ltda ++ ++# we can do this but it is not needed normally :-) ++#1.organizationName = Second Organization Name (eg, company) ++#1.organizationName_default = World Wide Web Pty Ltd ++ ++organizationalUnitName = Organizational Unit Name (eg, section) ++organizationalUnitName_default = Department of Computer Science ++ ++commonName = Common Name (eg, YOUR name) ++commonName_default = Server B ++commonName_max = 64 ++ ++emailAddress = Email Address ++emailAddress_max = 64 ++ ++# SET-ex3 = SET extension number 3 ++ ++[ req_attributes ] ++challengePassword = A challenge password ++challengePassword_min = 4 ++challengePassword_max = 20 ++ ++unstructuredName = An optional company name ++ ++[ usr_cert ] ++ ++# These extensions are added when 'ca' signs a request. ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++[ v3_req ] ++ ++# Extensions to add to a certificate request ++ ++basicConstraints = CA:FALSE ++keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++[ v3_ca ] ++ ++ ++# Extensions for a typical CA ++ ++ ++# PKIX recommendation. ++ ++subjectKeyIdentifier=hash ++ ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++# This is what PKIX recommends but some broken software chokes on critical ++# extensions. ++#basicConstraints = critical,CA:true ++# So we do this instead. ++basicConstraints = CA:true ++ ++# Key usage: this is typical for a CA certificate. However since it will ++# prevent it being used as an test self-signed certificate it is best ++# left out by default. ++# keyUsage = cRLSign, keyCertSign ++ ++# Some might want this also ++# nsCertType = sslCA, emailCA ++ ++# Include email address in subject alt name: another PKIX recommendation ++# subjectAltName=email:copy ++# Copy issuer details ++# issuerAltName=issuer:copy ++ ++# DER hex encoding of an extension: beware experts only! ++# obj=DER:02:03 ++# Where 'obj' is a standard or added object ++# You can even override a supported extension: ++# basicConstraints= critical, DER:30:03:01:01:FF ++ ++[ crl_ext ] ++ ++# CRL extensions. ++# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. ++ ++# issuerAltName=issuer:copy ++authorityKeyIdentifier=keyid:always,issuer:always ++ ++[ proxy_cert_ext ] ++# These extensions should be added when creating a proxy certificate ++ ++# This goes against PKIX guidelines but some CAs do it and some software ++# requires this to avoid interpreting an end user certificate as a CA. ++ ++basicConstraints=CA:FALSE ++ ++# Here are some examples of the usage of nsCertType. If it is omitted ++# the certificate can be used for anything *except* object signing. ++ ++# This is OK for an SSL server. ++# nsCertType = server ++ ++# For an object signing certificate this would be used. ++# nsCertType = objsign ++ ++# For normal client use this is typical ++# nsCertType = client, email ++ ++# and for everything including object signing: ++# nsCertType = client, email, objsign ++ ++# This is typical in keyUsage for a client certificate. ++# keyUsage = nonRepudiation, digitalSignature, keyEncipherment ++ ++# This will be displayed in Netscape's comment listbox. ++nsComment = "OpenSSL Generated Certificate" ++ ++# PKIX recommendations harmless if included in all certificates. ++subjectKeyIdentifier=hash ++authorityKeyIdentifier=keyid,issuer:always ++ ++# This stuff is for subjectAltName and issuerAltname. ++# Import the email address. ++# subjectAltName=email:copy ++# An alternative to produce certificates that aren't ++# deprecated according to PKIX. ++# subjectAltName=email:move ++ ++# Copy subject details ++# issuerAltName=issuer:copy ++ ++#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem ++#nsBaseUrl ++#nsRevocationUrl ++#nsRenewalUrl ++#nsCaPolicyUrl ++#nsSslServerName ++ ++# This really needs to be in place for it to be a proxy certificate. ++proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo +diff --git a/tests/certs/serverB.sh b/tests/certs/serverB.sh +new file mode 100755 +index 0000000..c75b00a +--- /dev/null ++++ b/tests/certs/serverB.sh +@@ -0,0 +1,12 @@ ++#!/bin/sh ++ ++openssl req -newkey rsa:1024 -keyout serverBkey.pem -out serverBreq.pem \ ++ -config ./serverB.cnf -nodes -days 365 -batch ++ ++openssl x509 -req -in serverBreq.pem -sha1 -extfile ./serverB.cnf \ ++ -extensions usr_cert -CA rootB.pem -CAkey rootBkey.pem -CAcreateserial \ ++ -out serverBcert.pem -days 365 ++ ++cat serverBcert.pem rootB.pem > serverB.pem ++ ++openssl x509 -subject -issuer -noout -in serverB.pem |