diff --git a/.gitignore b/.gitignore index aa40d12c7688d2cdb2f4ddc86799765d4c004af3..55dfb01fffef95d9379e598bed2c0433d93d38af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .vscode servroot* +nginx \ No newline at end of file diff --git a/README.md b/README.md index 16e58bd4200609a3288799e51f02cf327492d721..c0a786dae94ae5bdb5d1bef9c71018bfae291cbb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@ ## Description -_ngx_http_voms_module_ is a module for the [NGINX web server](https://www.nginx.org/) that enables client-side authentication based on X.509 proxies augmented with Attribute Certificates, typically obtained through a [Virtual Organization Membership Service](https://italiangrid.github.io/voms/) (VOMS). +_ngx_http_voms_module_ is a module for the [Nginx web server](https://www.nginx.org/) that enables client-side authentication based on X.509 proxy certificates augmented with VOMS Attribute Certificates, typically obtained from a [Virtual Organization Membership Service](https://italiangrid.github.io/voms/) (VOMS) server. + +The module defines a set of [_embedded_ variables](~embedded-variables), whose values are extracted from the first Attribute Certificate found in the certificate chain. ## Installation @@ -19,16 +21,75 @@ A Docker image is available for use in the context of the StoRM2 project, where % ./configure ${resty_config_options} --add-module=../ngx_http_voms_module % make && make install -## Variables +## Embedded Variables + +The module makes the following embedded variables available for use in an Nginx configuration file: + +### voms_user + +The Subject of the End-Entity certificate, used to sign the proxy. + +_Example_: ``/C=IT/O=IGI/CN=test0`` + +### voms_user_ca + +The Issuer (Certificate Authority) of the End-Entity certificate. -The module makes the following variables available for use in an NGINX configuration file: +_Example_: ``/C=IT/O=IGI/CN=Test CA`` ### voms_fqans -A comma-separated list of _Fully Qualified Attribute Names_ +A comma-separated list of Fully Qualified Attribute Names. See [The VOMS Attribute Certificate Format](http://ogf.org/documents/GFD.182.pdf) for more details. -### voms_user +_Example_: ``/test/exp1,/test/exp2,/test/exp3/Role=PIPPO`` + +### voms_server + +The Subject of the VOMS server certificate, used to sign the Attribute Certificate. + +_Example_: ``/C=IT/O=IGI/CN=voms.example`` + +### voms_server_ca + +The Issuer (Certificate Authority) of the VOMS server certificate. + +_Example_: ``/C=IT/O=IGI/CN=Test CA`` + +### voms_vo + +The name of the Virtual Organization (VO) to which the End Entity belongs. + +_Example_: ``test.vo`` + +### voms_server_uri + +The hostname and port of the VOMS network service that issued the Attribute Certificate, in the form _hostname_ :_port_. + +_Example_: ``voms.example:15000`` + +### voms_not_before + +The date before which the Attribute Certificate is not yet valid, in the form _YYYYMMDDhhmmss_ ``Z``. + +_Example_: ``20180101000000Z`` + +### voms_not_after + +The date after which the Attribute Certificate is not valid anymore, in the form _YYYYMMDDhhmmss_ ``Z``. + +_Example_: ``20180101120000Z`` + +### voms_generic_attributes + +A comma-separated list of attributes, each defined by three properties and formatted as ``n=``_name_ ``v=``_value_ ``q=``_qualifier_. The qualifier typically coincides with the name of the VO. + +_Example_: ``n=nickname v=newland q=test.vo,n=nickname v=giaco q=test.vo`` + +### voms_serial + +The serial number of the Attribute Certificate in hexadecimal format. +_Example_: ``7B`` ## Testing diff --git a/src/ngx_http_voms_module.cpp b/src/ngx_http_voms_module.cpp index 7cfdebbc9c12142efed42334a8df6f0cf8a17784..bc3af266bfeb19fc7569d1f94adf235aeb30432d 100644 --- a/src/ngx_http_voms_module.cpp +++ b/src/ngx_http_voms_module.cpp @@ -63,29 +63,110 @@ ngx_module_t ngx_http_voms_module = { static std::unique_ptr<vomsdata> vomsdata_ptr; -static ngx_int_t get_voms_fqans( // - ngx_http_request_t* r, - ngx_http_variable_value_t* v, - uintptr_t data); -static ngx_int_t get_voms_user( // +static ngx_int_t generic_getter( // ngx_http_request_t* r, ngx_http_variable_value_t* v, uintptr_t data); +using getter_t = std::string(VomsAc const& voms); +static getter_t get_voms_user; +static getter_t get_voms_user_ca; +static getter_t get_voms_fqans; +static getter_t get_voms_server; +static getter_t get_voms_server_ca; +static getter_t get_voms_vo; +static getter_t get_voms_server_uri; +static getter_t get_voms_not_before; +static getter_t get_voms_not_after; +static getter_t get_voms_generic_attributes; +static getter_t get_voms_serial; + static ngx_http_variable_t variables[] = { + { + ngx_string("voms_user"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_user), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_user_ca"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_user_ca), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, { ngx_string("voms_fqans"), NULL, - get_voms_fqans, - 0, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_fqans), NGX_HTTP_VAR_NOCACHEABLE, 0 // }, { - ngx_string("voms_user"), + ngx_string("voms_server"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_server), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_server_ca"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_server_ca), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_vo"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_vo), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_server_uri"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_server_uri), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_not_before"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_not_before), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_not_after"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_not_after), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_generic_attributes"), + NULL, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_generic_attributes), + NGX_HTTP_VAR_NOCACHEABLE, + 0 // + }, + { + ngx_string("voms_serial"), NULL, - get_voms_user, - 0, + generic_getter, + reinterpret_cast<uintptr_t>(&get_voms_serial), NGX_HTTP_VAR_NOCACHEABLE, 0 // }, @@ -110,9 +191,13 @@ static ngx_int_t add_variables(ngx_conf_t* cf) // return the first AC, if present static MaybeVomsAc retrieve_voms_ac_from_proxy(ngx_http_request_t* r) { - ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __FUNCTION__); + ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __func__); if (!r->http_connection->ssl) { + ngx_log_error(NGX_LOG_ERR, + r->connection->log, + 0, + "SSL not enabled"); return boost::none; } @@ -122,7 +207,7 @@ static MaybeVomsAc retrieve_voms_ac_from_proxy(ngx_http_request_t* r) ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, - "SSL_get_peer_certificate() failed"); + "no SSL peer certificate available"); return boost::none; } @@ -139,13 +224,8 @@ static MaybeVomsAc retrieve_voms_ac_from_proxy(ngx_http_request_t* r) auto ok = vomsdata_ptr->Retrieve(client_cert.get(), client_chain, RECURSE_CHAIN); if (!ok) { - // vd.error is not interpreted correctly by the logger, which probably uses - // errno - ngx_log_error(NGX_LOG_ERR, - r->connection->log, - vomsdata_ptr->error, - "%s", - vomsdata_ptr->ErrorMessage().c_str()); + auto msg = vomsdata_ptr->ErrorMessage().c_str(); + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "%s", msg); return boost::none; } @@ -160,7 +240,7 @@ static MaybeVomsAc retrieve_voms_ac_from_proxy(ngx_http_request_t* r) static void clean_voms_ac(void* data) { auto r = static_cast<ngx_http_request_t*>(data); - ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __FUNCTION__); + ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __func__); auto p = static_cast<MaybeVomsAc*>( ngx_http_get_module_ctx(r, ngx_http_voms_module)); @@ -188,7 +268,7 @@ static MaybeVomsAc* get_voms_ac_from_cache(ngx_http_request_t* r) static MaybeVomsAc const& get_voms_ac(ngx_http_request_t* r) { - ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __FUNCTION__); + ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __func__); MaybeVomsAc* acp = get_voms_ac_from_cache(r); @@ -200,11 +280,11 @@ static MaybeVomsAc const& get_voms_ac(ngx_http_request_t* r) return *acp; } -static ngx_int_t get_voms_fqans(ngx_http_request_t* r, +static ngx_int_t generic_getter(ngx_http_request_t* r, ngx_http_variable_value_t* v, - uintptr_t) + uintptr_t data) { - ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __FUNCTION__); + ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __func__); v->not_found = 1; v->valid = 0; @@ -216,52 +296,120 @@ static ngx_int_t get_voms_fqans(ngx_http_request_t* r, return NGX_OK; } - auto fqans = boost::algorithm::join(ac->fqan, ","); + using getter_p = std::string (*)(VomsAc const& voms); + auto getter = reinterpret_cast<getter_p>(data); + std::string const value = getter(*ac); - auto data = static_cast<u_char*>(ngx_pnalloc(r->pool, fqans.size())); - if (!data) { + auto buffer = static_cast<u_char*>(ngx_pnalloc(r->pool, value.size())); + if (!buffer) { ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "ngx_pnalloc() failed"); return NGX_OK; } - ngx_memcpy(data, fqans.c_str(), fqans.size()); + ngx_memcpy(buffer, value.c_str(), value.size()); - v->data = data; - v->len = fqans.size(); + v->data = buffer; + v->len = value.size(); v->valid = 1; v->not_found = 0; v->no_cacheable = 0; return NGX_OK; } -static ngx_int_t get_voms_user(ngx_http_request_t* r, - ngx_http_variable_value_t* v, - uintptr_t) +std::string get_voms_user(VomsAc const& ac) { - ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s", __FUNCTION__); + return ac.user; +} - v->not_found = 1; - v->valid = 0; +std::string get_voms_user_ca(VomsAc const& ac) +{ + return ac.userca; +} - auto& ac = get_voms_ac(r); +std::string get_voms_fqans(VomsAc const& ac) +{ + return boost::algorithm::join(ac.fqan, ","); +} - if (!ac) { - ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "get_voms_ac() failed"); - return NGX_OK; +std::string get_voms_server(VomsAc const& ac) +{ + return ac.server; +} + +std::string get_voms_server_ca(VomsAc const& ac) +{ + return ac.serverca; +} + +std::string get_voms_vo(VomsAc const& ac) +{ + return ac.voname; +} + +std::string get_voms_server_uri(VomsAc const& ac) +{ + return ac.uri; +} + +std::string get_voms_not_before(VomsAc const& ac) +{ + return ac.date1; +} + +std::string get_voms_not_after(VomsAc const& ac) +{ + return ac.date2; +} + +static std::string escape_uri(std::string const& src) +{ + std::string result = src; + + // the following just counts the number of characters that need escaping + auto const n_escape = + ngx_escape_uri(nullptr, // <-- + reinterpret_cast<u_char*>(const_cast<char*>(src.data())), + src.size(), + NGX_ESCAPE_URI_COMPONENT); + + if (n_escape > 0) { + result.resize(src.size() + 2 * n_escape); + ngx_escape_uri(reinterpret_cast<u_char*>(const_cast<char*>(result.data())), + reinterpret_cast<u_char*>(const_cast<char*>(src.data())), + src.size(), + NGX_ESCAPE_URI_COMPONENT); } - auto const& user = ac->user; + return result; +} - auto data = static_cast<u_char*>(ngx_pnalloc(r->pool, user.size())); - if (!data) { - ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "ngx_pnalloc() failed"); - return NGX_OK; +static std::string encode(attribute const& a) +{ + return "n=" + a.name + " v=" + escape_uri(a.value) + " q=" + a.qualifier; +} + +std::string get_voms_generic_attributes(VomsAc const& ac) +{ + std::string result; + + // the GetAttributes method is not declared const + auto const attributes = const_cast<VomsAc&>(ac).GetAttributes(); + if (!attributes.empty()) { + auto& gas = attributes.front().attributes; + bool first = true; + for (auto& a : gas) { + if (first) { + first = false; + } else { + result += ','; + } + result += encode(a); + } } - ngx_memcpy(data, user.c_str(), user.size()); - v->data = data; - v->len = user.size(); - v->valid = 1; - v->not_found = 0; - v->no_cacheable = 0; - return NGX_OK; + return result; +} + +std::string get_voms_serial(VomsAc const& ac) +{ + return ac.serial; } diff --git a/t/README.md b/t/README.md index 9cccd8c2b5e4775f114a3b0e0bb209c9fbdb31e3..436da548553ba71f88ec43ab938b26c73a45a3f2 100644 --- a/t/README.md +++ b/t/README.md @@ -27,3 +27,19 @@ Using the docker image provided to exploit Openresty in the Storm2 project (see prove -v A copy of the `t` folder is needed since the `prove` command creates a directory `servroot` in `t`. + +### Test coverage + +To enable test coverage pass the `--coverage` option to both the compiler and the linker. For example, if the build happens inside the ``storm2/nginx-voms-build`` image: + +``` + % ./configure ${resty_config_options} --add-module=../ngx_http_voms_module --with-debug --with-cc-opt="-g -O0 --coverage" --with-ld-opt="--coverage" + % make && make install +``` + +Building in debug mode, with no optimizations, helps to better associate coverage information to source code. + +The above command generates data files aside the source files for all Nginx. To enable coverage only for ``ngx_http_voms_module`` the ``--coverage`` option should be passed only when compiling ``ngx_http_voms_module.cpp`` (to be done). + +The run the tests, e.g. with `prove`. This will create other data files with coverage information. To view that information, run `gcov <source of object file>`, e.g. `gcov /home/build/openresty-1.13.6.1/build/nginx-1.13.6/objs/addon/src/ngx_http_voms_module.o`. This will produce files with the ``.gcov`` extension in the current directory. + diff --git a/t/certs/3.cert.pem b/t/certs/3.cert.pem new file mode 100644 index 0000000000000000000000000000000000000000..15be540efb76d6db892021e3b4ca4fb2d3e69f33 --- /dev/null +++ b/t/certs/3.cert.pem @@ -0,0 +1,74 @@ +-----BEGIN CERTIFICATE----- +MIIJPDCCCCagAwIBAgIEZ/6+ljALBgkqhkiG9w0BAQUwKzELMAkGA1UEBhMCSVQx +DDAKBgNVBAoTA0lHSTEOMAwGA1UEAxMFdGVzdDAwHhcNMTgwMzE1MTY0NTE5WhcN +MjIwOTI0MTUzOTM0WjBAMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYD +VQQDEwV0ZXN0MDETMBEGA1UEAxMKMTc0NDc0ODE4MjCBnzANBgkqhkiG9w0BAQEF +AAOBjQAwgYkCgYEAmS0/UqVrzzRvttdHu/v4y7Sfm5ceFJ4lQfBienwvS3F0oOtJ +7sMqZNktJ2vhAK6ckt5C9PhdvgZa7HJTy1G8GZAbpxEDfAVMSVXFrN8KY7oybA4N +mmr6jfuuXJCUe3DioxQuUHcH8ShXSiGXm/uoQVe7QfPHtHYtk1xmdA//L1kCAwEA +AaOCBtkwggbVMA4GA1UdDwEB/wQEAwIF4DAdBggrBgEFBQcBDgEB/wQOMAwwCgYI +KwYBBQUHFQEwggaiBgorBgEEAb5FZGQFBIIGkjCCBo4wggaKMIIGhjCCBW4CAQEw +NqA0MC+kLTArMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYDVQQDEwV0 +ZXN0MAIBCaA4MDakNDAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUwEwYD +VQQDDAx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQELBQACAXswIhgPMjAxODAxMDEw +MDAwMDBaGA8yMDMwMDEwMTAwMDAwMFowYzBhBgorBgEEAb5FZGQEMVMwUaAehhx0 +ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwMC8ECi90ZXN0L2V4cDEECi90ZXN0 +L2V4cDIEFS90ZXN0L2V4cDMvUm9sZT1QSVBQTzCCBFowcAYKKwYBBAG+RWRkCwRi +MGAwXjBcMB6GHHRlc3Qudm86Ly92b21zLmV4YW1wbGU6MTUwMDAwOjAcBAhuaWNr +bmFtZQQHbmV3bGFuZAQHdGVzdC52bzAaBAhuaWNrbmFtZQQFZ2lhY28EB3Rlc3Qu +dm8wggOyBgorBgEEAb5FZGQKBIIDojCCA54wggOaMIIDljCCAn6gAwIBAgICAxMw +DQYJKoZIhvcNAQELBQAwLTELMAkGA1UEBhMCSVQxDDAKBgNVBAoMA0lHSTEQMA4G +A1UEAwwHVGVzdCBDQTAeFw0xNzEyMDYwOTQ2MzdaFw0yNzEyMDQwOTQ2MzdaMDIx +CzAJBgNVBAYTAklUMQwwCgYDVQQKDANJR0kxFTATBgNVBAMMDHZvbXMuZXhhbXBs +ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALx/yNoeDZNQtJgiGi+t +I/SSK3KREpvv4aOipgMEvcfCf3hReP2UBtOq6N1Wjx3VHaVJP0yyTNE+aSxgwI9f +D3xtpMtYDG7eM2psMhG70+FNAxO1H5k1HR+vtHvathtadnZUBPPo12BrxlXZ1BLr +e/I93+ye2tTfEK/u3J2WxxSMYBbYksopjN/3T4+Lp4AB5/d6TzwyQq/OLvgae7y1 +6yCn1SjBpNNU09zA3JZ7xAnFny/I23NhAeQul7kFZBrcdgkJ66++bEe5W0GGwVHA +/mUjK5SssIFGmZrCnm8LYgM001u12+esOA4xY+2BH268QWWJsY0vX/qK2ois+Ms/ +6ysCAwEAAaOBujCBtzAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQzjAnUSZQBztH7 +C50ZXq3E1/WQxDAOBgNVHQ8BAf8EBAMCBeAwPgYDVR0lBDcwNQYIKwYBBQUHAwEG +CCsGAQUFBwMCBgorBgEEAYI3CgMDBglghkgBhvhCBAEGCCsGAQUFBwMEMB8GA1Ud +IwQYMBaAFJF3NnsutGnzJ+q39giLSiOiEUnGMBcGA1UdEQQQMA6CDHZvbXMuZXhh +bXBsZTANBgkqhkiG9w0BAQsFAAOCAQEA4MUI5JKbJgkEZLmeySeCLJBMS/E8Gk3N +9lr+ilhrNkI7e9DgZiruLa3QKllSyESFtpCvEknM3qRlqulug+HPINOYjz6ooYL4 +9W6Xc3i+RqdapxAwtwETz7QDxnT35LhRITN5SojWAcvBIjdunx0sPuvQCVE7Cl+1 +GbYaNWOVlPWZobwYvISqm3A6si3C7VAZIBaUIepJ4dhhEJ31KWURohUrivcUWkm4 +LVwP/Hcg5wM6FbghMdgz/I9wHKaQgISzrx8tKJ7G4opD7CYyv9dqqkJaLFApM123 +6Fgitsd7v6SsVTItUVga7p6A0k0kS2rjly6nXONQhDO17KQgbnAd6TAJBgNVHTgE +AgUAMCUGA1UdIwQeMByAGgQYMBaAFJF3NnsutGnzJ+q39giLSiOiEUnGMA0GCSqG +SIb3DQEBCwUAA4IBAQAZoBjoegcM+SPWiBU+qTtYDYRVuShZwzx6L/74iwVMYT5m +waosJYZsMC9FvwdQUpuajrJ2B5LaQwe9iaEekukh/GGFJJme2WVrf6VBhwKBSUtV +f9UMqqF8PSdDwkEwsqSJXFq1mT/izMm+kYy0gppkv3SXDznAYKTtv7+CBPwctbvi +pcAF5b0KT/ET2vy6zpMbbyT/yUraHJ40Uq9/AwHSbUhsG+XDMVwcMdrdvRYVIpKW +AUya8pyGAIOVN/YVtLZ+3l0Kt6Ku8dXMwm1Ym9Yk2xukq1jIGMfyEPKq0Rv2NICy +M5aY7ROPiV+6g8yfTalguqk4RtItSLU+gCX9umv2MAsGCSqGSIb3DQEBBQOCAQEA +iFx5+S5BFWIAZs7vSPFS3krpJKjjTVpF/QidXHhhNdWcyeO8NRalo1/UmaImRWHN +JK+Nw8Io/ldHE9ZbytEnfSCI7ouwqWR3gz924LA9xqd8+8ue0avtrj0bCH2/qid8 +p3IN2HNHRTiPjIcg/0UgOxFcZEoliLhm4cSgKTeZFal7Z6wCADN4dgF5WpPsZ8l7 +gu4RPRfYBjxXLGZwLI0WD6yHKA1cEYe/HU/KXmszQjOCXffi9tB6p9UxCAFzJfGg +U0LnSy+xWpR3sAeZgoUyqdw72ueGlOX0M4vkVmtOupursXW9mQackfeC31dE4pql ++pn63MqMKHqYIgDlIwbZzw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgIBCTANBgkqhkiG9w0BAQUFADAtMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRAwDgYDVQQDDAdUZXN0IENBMB4XDTEyMDkyNjE1MzkzNFoX +DTIyMDkyNDE1MzkzNFowKzELMAkGA1UEBhMCSVQxDDAKBgNVBAoTA0lHSTEOMAwG +A1UEAxMFdGVzdDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKxtrw +hoZ27SxxISjlRqWmBWB6U+N/xW2kS1uUfrQRav6auVtmtEW45J44VTi3WW6Y113R +BwmS6oW+3lzyBBZVPqnhV9/VkTxLp83gGVVvHATgGgkjeTxIsOE+TkPKAoZJ/QFc +CfPh3WdZ3ANI14WYkAM9VXsSbh2okCsWGa4o6pzt3Pt1zKkyO4PW0cBkletDImJK +2vufuDVNm7Iz/y3/8pY8p3MoiwbF/PdSba7XQAxBWUJMoaleh8xy8HSROn7tF2al +xoDLH4QWhp6UDn2rvOWseBqUMPXFjsUi1/rkw1oHAjMroTk5lL15GI0LGd5dTVop +kKXFbTTYxSkPz1MLAgMBAAGjgcowgccwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU +fLdB5+jO9LyWN2/VCNYgMa0jvHEwDgYDVR0PAQH/BAQDAgXgMD4GA1UdJQQ3MDUG +CCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBBggrBgEF +BQcDBDAfBgNVHSMEGDAWgBSRdzZ7LrRp8yfqt/YIi0ojohFJxjAnBgNVHREEIDAe +gRxhbmRyZWEuY2VjY2FudGlAY25hZi5pbmZuLml0MA0GCSqGSIb3DQEBBQUAA4IB +AQANYtWXetheSeVpCfnId9TkKyKTAp8RahNZl4XFrWWn2S9We7ACK/G7u1DebJYx +d8POo8ClscoXyTO2BzHHZLxauEKIzUv7g2GehI+SckfZdjFyRXjD0+wMGwzX7MDu +SL3CG2aWsYpkBnj6BMlr0P3kZEMqV5t2+2Tj0+aXppBPVwzJwRhnrSJiO5WIZAZf +49YhMn61sQIrepvhrKEUR4XVorH2Bj8ek1/iLlgcmFMBOds+PrehSRR8Gn0IjlEg +C68EY6KPE+FKySuS7Ur7lTAjNdddfdAgKV6hJyST6/dx8ymIkb8nxCPnxCcT2I2N +vDxcPMc/wmnMa+smNal0sJ6m +-----END CERTIFICATE----- diff --git a/t/certs/3.key.pem b/t/certs/3.key.pem new file mode 100644 index 0000000000000000000000000000000000000000..889603377138258d4da5ea465af424a790cd8b52 --- /dev/null +++ b/t/certs/3.key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCZLT9SpWvPNG+210e7+/jLtJ+blx4UniVB8GJ6fC9LcXSg60nu +wypk2S0na+EArpyS3kL0+F2+BlrsclPLUbwZkBunEQN8BUxJVcWs3wpjujJsDg2a +avqN+65ckJR7cOKjFC5QdwfxKFdKIZeb+6hBV7tB88e0di2TXGZ0D/8vWQIDAQAB +AoGAFA5VnTelnxLJkdIsRVPfpqR2xYOK3745OKIF8u2xr5oiYDOOkaGiOmQpQmEg +q9sxCxXpBHREqe3hF9Z8XEHOdAIFqFt1MgwJB3OmtaXRwDDPJ3WRZFvxYde+/KII +U3ca1tOmoLgVyto/7v+9Z7Rn7g4wFEDlK+r4I+zGtLO6xAECQQDkSRUxDw/w+BOR +Rl2OOdLCgf8Xv+G7z5qd3tRN+UcvQ14EYkAqOnCFNoWZfaxx89qEIVmIAImTgI2N +8EStzPOBAkEAq8XZeK9fbFXG0617odwr0NX6UiKVpl/pR2kxS53+XUxlDusb8Y6d +mqllpDjcD/c28MYyf3wzrp1sSVszk7xH2QJAQrrONAH4IfMSHTQZYtqqLes7+uA/ +Btw/kQgyvPwx/7HMiLGDmhRtEbOHR//BaanjZR4ugp/Nl01Lk4L5QGiZgQJAKgZz +2GT/sZ+iz3MoRkd5qNRRM/smJdhdWI1R9DApZWYla2r2ITlFMeuz5GPM41MWa/3x +qOMYOeZl8eSQT9rGsQJBANxbeVGdg4D0qvgtFSzpclcQiTffW293DP84Bs6QKNW0 +Fkh3ZcFHHDEmeZuDOPBQDI+ZQxT7Yy+of31h2sehsX4= +-----END RSA PRIVATE KEY----- diff --git a/t/certs/3.pem b/t/certs/3.pem new file mode 100644 index 0000000000000000000000000000000000000000..d54e52a3b7da983a844847ef68d0bb39c014cb58 --- /dev/null +++ b/t/certs/3.pem @@ -0,0 +1,89 @@ +-----BEGIN CERTIFICATE----- +MIIJPDCCCCagAwIBAgIEZ/6+ljALBgkqhkiG9w0BAQUwKzELMAkGA1UEBhMCSVQx +DDAKBgNVBAoTA0lHSTEOMAwGA1UEAxMFdGVzdDAwHhcNMTgwMzE1MTY0NTE5WhcN +MjIwOTI0MTUzOTM0WjBAMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYD +VQQDEwV0ZXN0MDETMBEGA1UEAxMKMTc0NDc0ODE4MjCBnzANBgkqhkiG9w0BAQEF +AAOBjQAwgYkCgYEAmS0/UqVrzzRvttdHu/v4y7Sfm5ceFJ4lQfBienwvS3F0oOtJ +7sMqZNktJ2vhAK6ckt5C9PhdvgZa7HJTy1G8GZAbpxEDfAVMSVXFrN8KY7oybA4N +mmr6jfuuXJCUe3DioxQuUHcH8ShXSiGXm/uoQVe7QfPHtHYtk1xmdA//L1kCAwEA +AaOCBtkwggbVMA4GA1UdDwEB/wQEAwIF4DAdBggrBgEFBQcBDgEB/wQOMAwwCgYI +KwYBBQUHFQEwggaiBgorBgEEAb5FZGQFBIIGkjCCBo4wggaKMIIGhjCCBW4CAQEw +NqA0MC+kLTArMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYDVQQDEwV0 +ZXN0MAIBCaA4MDakNDAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUwEwYD +VQQDDAx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQELBQACAXswIhgPMjAxODAxMDEw +MDAwMDBaGA8yMDMwMDEwMTAwMDAwMFowYzBhBgorBgEEAb5FZGQEMVMwUaAehhx0 +ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwMC8ECi90ZXN0L2V4cDEECi90ZXN0 +L2V4cDIEFS90ZXN0L2V4cDMvUm9sZT1QSVBQTzCCBFowcAYKKwYBBAG+RWRkCwRi +MGAwXjBcMB6GHHRlc3Qudm86Ly92b21zLmV4YW1wbGU6MTUwMDAwOjAcBAhuaWNr +bmFtZQQHbmV3bGFuZAQHdGVzdC52bzAaBAhuaWNrbmFtZQQFZ2lhY28EB3Rlc3Qu +dm8wggOyBgorBgEEAb5FZGQKBIIDojCCA54wggOaMIIDljCCAn6gAwIBAgICAxMw +DQYJKoZIhvcNAQELBQAwLTELMAkGA1UEBhMCSVQxDDAKBgNVBAoMA0lHSTEQMA4G +A1UEAwwHVGVzdCBDQTAeFw0xNzEyMDYwOTQ2MzdaFw0yNzEyMDQwOTQ2MzdaMDIx +CzAJBgNVBAYTAklUMQwwCgYDVQQKDANJR0kxFTATBgNVBAMMDHZvbXMuZXhhbXBs +ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALx/yNoeDZNQtJgiGi+t +I/SSK3KREpvv4aOipgMEvcfCf3hReP2UBtOq6N1Wjx3VHaVJP0yyTNE+aSxgwI9f +D3xtpMtYDG7eM2psMhG70+FNAxO1H5k1HR+vtHvathtadnZUBPPo12BrxlXZ1BLr +e/I93+ye2tTfEK/u3J2WxxSMYBbYksopjN/3T4+Lp4AB5/d6TzwyQq/OLvgae7y1 +6yCn1SjBpNNU09zA3JZ7xAnFny/I23NhAeQul7kFZBrcdgkJ66++bEe5W0GGwVHA +/mUjK5SssIFGmZrCnm8LYgM001u12+esOA4xY+2BH268QWWJsY0vX/qK2ois+Ms/ +6ysCAwEAAaOBujCBtzAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQzjAnUSZQBztH7 +C50ZXq3E1/WQxDAOBgNVHQ8BAf8EBAMCBeAwPgYDVR0lBDcwNQYIKwYBBQUHAwEG +CCsGAQUFBwMCBgorBgEEAYI3CgMDBglghkgBhvhCBAEGCCsGAQUFBwMEMB8GA1Ud +IwQYMBaAFJF3NnsutGnzJ+q39giLSiOiEUnGMBcGA1UdEQQQMA6CDHZvbXMuZXhh +bXBsZTANBgkqhkiG9w0BAQsFAAOCAQEA4MUI5JKbJgkEZLmeySeCLJBMS/E8Gk3N +9lr+ilhrNkI7e9DgZiruLa3QKllSyESFtpCvEknM3qRlqulug+HPINOYjz6ooYL4 +9W6Xc3i+RqdapxAwtwETz7QDxnT35LhRITN5SojWAcvBIjdunx0sPuvQCVE7Cl+1 +GbYaNWOVlPWZobwYvISqm3A6si3C7VAZIBaUIepJ4dhhEJ31KWURohUrivcUWkm4 +LVwP/Hcg5wM6FbghMdgz/I9wHKaQgISzrx8tKJ7G4opD7CYyv9dqqkJaLFApM123 +6Fgitsd7v6SsVTItUVga7p6A0k0kS2rjly6nXONQhDO17KQgbnAd6TAJBgNVHTgE +AgUAMCUGA1UdIwQeMByAGgQYMBaAFJF3NnsutGnzJ+q39giLSiOiEUnGMA0GCSqG +SIb3DQEBCwUAA4IBAQAZoBjoegcM+SPWiBU+qTtYDYRVuShZwzx6L/74iwVMYT5m +waosJYZsMC9FvwdQUpuajrJ2B5LaQwe9iaEekukh/GGFJJme2WVrf6VBhwKBSUtV +f9UMqqF8PSdDwkEwsqSJXFq1mT/izMm+kYy0gppkv3SXDznAYKTtv7+CBPwctbvi +pcAF5b0KT/ET2vy6zpMbbyT/yUraHJ40Uq9/AwHSbUhsG+XDMVwcMdrdvRYVIpKW +AUya8pyGAIOVN/YVtLZ+3l0Kt6Ku8dXMwm1Ym9Yk2xukq1jIGMfyEPKq0Rv2NICy +M5aY7ROPiV+6g8yfTalguqk4RtItSLU+gCX9umv2MAsGCSqGSIb3DQEBBQOCAQEA +iFx5+S5BFWIAZs7vSPFS3krpJKjjTVpF/QidXHhhNdWcyeO8NRalo1/UmaImRWHN +JK+Nw8Io/ldHE9ZbytEnfSCI7ouwqWR3gz924LA9xqd8+8ue0avtrj0bCH2/qid8 +p3IN2HNHRTiPjIcg/0UgOxFcZEoliLhm4cSgKTeZFal7Z6wCADN4dgF5WpPsZ8l7 +gu4RPRfYBjxXLGZwLI0WD6yHKA1cEYe/HU/KXmszQjOCXffi9tB6p9UxCAFzJfGg +U0LnSy+xWpR3sAeZgoUyqdw72ueGlOX0M4vkVmtOupursXW9mQackfeC31dE4pql ++pn63MqMKHqYIgDlIwbZzw== +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCZLT9SpWvPNG+210e7+/jLtJ+blx4UniVB8GJ6fC9LcXSg60nu +wypk2S0na+EArpyS3kL0+F2+BlrsclPLUbwZkBunEQN8BUxJVcWs3wpjujJsDg2a +avqN+65ckJR7cOKjFC5QdwfxKFdKIZeb+6hBV7tB88e0di2TXGZ0D/8vWQIDAQAB +AoGAFA5VnTelnxLJkdIsRVPfpqR2xYOK3745OKIF8u2xr5oiYDOOkaGiOmQpQmEg +q9sxCxXpBHREqe3hF9Z8XEHOdAIFqFt1MgwJB3OmtaXRwDDPJ3WRZFvxYde+/KII +U3ca1tOmoLgVyto/7v+9Z7Rn7g4wFEDlK+r4I+zGtLO6xAECQQDkSRUxDw/w+BOR +Rl2OOdLCgf8Xv+G7z5qd3tRN+UcvQ14EYkAqOnCFNoWZfaxx89qEIVmIAImTgI2N +8EStzPOBAkEAq8XZeK9fbFXG0617odwr0NX6UiKVpl/pR2kxS53+XUxlDusb8Y6d +mqllpDjcD/c28MYyf3wzrp1sSVszk7xH2QJAQrrONAH4IfMSHTQZYtqqLes7+uA/ +Btw/kQgyvPwx/7HMiLGDmhRtEbOHR//BaanjZR4ugp/Nl01Lk4L5QGiZgQJAKgZz +2GT/sZ+iz3MoRkd5qNRRM/smJdhdWI1R9DApZWYla2r2ITlFMeuz5GPM41MWa/3x +qOMYOeZl8eSQT9rGsQJBANxbeVGdg4D0qvgtFSzpclcQiTffW293DP84Bs6QKNW0 +Fkh3ZcFHHDEmeZuDOPBQDI+ZQxT7Yy+of31h2sehsX4= +-----END RSA PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgIBCTANBgkqhkiG9w0BAQUFADAtMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRAwDgYDVQQDDAdUZXN0IENBMB4XDTEyMDkyNjE1MzkzNFoX +DTIyMDkyNDE1MzkzNFowKzELMAkGA1UEBhMCSVQxDDAKBgNVBAoTA0lHSTEOMAwG +A1UEAxMFdGVzdDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKxtrw +hoZ27SxxISjlRqWmBWB6U+N/xW2kS1uUfrQRav6auVtmtEW45J44VTi3WW6Y113R +BwmS6oW+3lzyBBZVPqnhV9/VkTxLp83gGVVvHATgGgkjeTxIsOE+TkPKAoZJ/QFc +CfPh3WdZ3ANI14WYkAM9VXsSbh2okCsWGa4o6pzt3Pt1zKkyO4PW0cBkletDImJK +2vufuDVNm7Iz/y3/8pY8p3MoiwbF/PdSba7XQAxBWUJMoaleh8xy8HSROn7tF2al +xoDLH4QWhp6UDn2rvOWseBqUMPXFjsUi1/rkw1oHAjMroTk5lL15GI0LGd5dTVop +kKXFbTTYxSkPz1MLAgMBAAGjgcowgccwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU +fLdB5+jO9LyWN2/VCNYgMa0jvHEwDgYDVR0PAQH/BAQDAgXgMD4GA1UdJQQ3MDUG +CCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBBggrBgEF +BQcDBDAfBgNVHSMEGDAWgBSRdzZ7LrRp8yfqt/YIi0ojohFJxjAnBgNVHREEIDAe +gRxhbmRyZWEuY2VjY2FudGlAY25hZi5pbmZuLml0MA0GCSqGSIb3DQEBBQUAA4IB +AQANYtWXetheSeVpCfnId9TkKyKTAp8RahNZl4XFrWWn2S9We7ACK/G7u1DebJYx +d8POo8ClscoXyTO2BzHHZLxauEKIzUv7g2GehI+SckfZdjFyRXjD0+wMGwzX7MDu +SL3CG2aWsYpkBnj6BMlr0P3kZEMqV5t2+2Tj0+aXppBPVwzJwRhnrSJiO5WIZAZf +49YhMn61sQIrepvhrKEUR4XVorH2Bj8ek1/iLlgcmFMBOds+PrehSRR8Gn0IjlEg +C68EY6KPE+FKySuS7Ur7lTAjNdddfdAgKV6hJyST6/dx8ymIkb8nxCPnxCcT2I2N +vDxcPMc/wmnMa+smNal0sJ6m +-----END CERTIFICATE----- diff --git a/t/certs/4.cert.pem b/t/certs/4.cert.pem new file mode 100644 index 0000000000000000000000000000000000000000..8b2c062188be147b5c015f41c905ce3905154b7e --- /dev/null +++ b/t/certs/4.cert.pem @@ -0,0 +1,74 @@ +-----BEGIN CERTIFICATE----- +MIIJUTCCCDugAwIBAgIEaWasDzALBgkqhkiG9w0BAQUwKzELMAkGA1UEBhMCSVQx +DDAKBgNVBAoTA0lHSTEOMAwGA1UEAxMFdGVzdDAwHhcNMTgwMzE1MTYzNDM5WhcN +MjIwOTI0MTUzOTM0WjBAMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYD +VQQDEwV0ZXN0MDETMBEGA1UEAxMKMTc2ODMzNjM5OTCBnzANBgkqhkiG9w0BAQEF +AAOBjQAwgYkCgYEAsH+q/KhzMLzYimKXZ8MV9B81mqWwUNdfkyp3ZmnsZV1yQLJ8 +pLm/zEX6Z+dyVkTfi80qIOIsv+81UtwT+OFeAJ+TR3e432BrXrrPitQuCBYUaTef +LH5iKmtCSiaJnY3BACjUdwRiIOzibcBY3obZR9RtrLZ9DpHR0W/0z1ShW8MCAwEA +AaOCBu4wggbqMA4GA1UdDwEB/wQEAwIF4DAdBggrBgEFBQcBDgEB/wQOMAwwCgYI +KwYBBQUHFQEwgga3BgorBgEEAb5FZGQFBIIGpzCCBqMwggafMIIGmzCCBYMCAQEw +NqA0MC+kLTArMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYDVQQDEwV0 +ZXN0MAIBCaA4MDakNDAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUwEwYD +VQQDDAx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQELBQACAQAwIhgPMjAxODAxMDEw +MDAwMDBaGA8yMDMwMDEwMTAwMDAwMFowYzBhBgorBgEEAb5FZGQEMVMwUaAehhx0 +ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwMC8ECi90ZXN0L2V4cDEECi90ZXN0 +L2V4cDIEFS90ZXN0L2V4cDMvUm9sZT1QSVBQTzCCBG8wgYQGCisGAQQBvkVkZAsE +djB0MHIwcDAehhx0ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwME4wHgQIbmlj +a25hbWUECW5ld2xhbmQ4NgQHdGVzdC52bzAsBAV0aXRsZQQaYXNzZWduaXN0YSVk +aSVyaWNlcmNhQENOQUYEB3Rlc3Qudm8wggOyBgorBgEEAb5FZGQKBIIDojCCA54w +ggOaMIIDljCCAn6gAwIBAgICAxMwDQYJKoZIhvcNAQELBQAwLTELMAkGA1UEBhMC +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgIBCTANBgkqhkiG9w0BAQUFADAtMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRAwDgYDVQQDDAdUZXN0IENBMB4XDTEyMDkyNjE1MzkzNFoX +DTIyMDkyNDE1MzkzNFowKzELMAkGA1UEBhMCSVQxDDAKBgNVBAoTA0lHSTEOMAwG +A1UEAxMFdGVzdDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKxtrw +hoZ27SxxISjlRqWmBWB6U+N/xW2kS1uUfrQRav6auVtmtEW45J44VTi3WW6Y113R +BwmS6oW+3lzyBBZVPqnhV9/VkTxLp83gGVVvHATgGgkjeTxIsOE+TkPKAoZJ/QFc +CfPh3WdZ3ANI14WYkAM9VXsSbh2okCsWGa4o6pzt3Pt1zKkyO4PW0cBkletDImJK +2vufuDVNm7Iz/y3/8pY8p3MoiwbF/PdSba7XQAxBWUJMoaleh8xy8HSROn7tF2al +xoDLH4QWhp6UDn2rvOWseBqUMPXFjsUi1/rkw1oHAjMroTk5lL15GI0LGd5dTVop +kKXFbTTYxSkPz1MLAgMBAAGjgcowgccwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU +fLdB5+jO9LyWN2/VCNYgMa0jvHEwDgYDVR0PAQH/BAQDAgXgMD4GA1UdJQQ3MDUG +CCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBBggrBgEF +BQcDBDAfBgNVHSMEGDAWgBSRdzZ7LrRp8yfqt/YIi0ojohFJxjAnBgNVHREEIDAe +gRxhbmRyZWEuY2VjY2FudGlAY25hZi5pbmZuLml0MA0GCSqGSIb3DQEBBQUAA4IB +AQANYtWXetheSeVpCfnId9TkKyKTAp8RahNZl4XFrWWn2S9We7ACK/G7u1DebJYx +d8POo8ClscoXyTO2BzHHZLxauEKIzUv7g2GehI+SckfZdjFyRXjD0+wMGwzX7MDu +SL3CG2aWsYpkBnj6BMlr0P3kZEMqV5t2+2Tj0+aXppBPVwzJwRhnrSJiO5WIZAZf +49YhMn61sQIrepvhrKEUR4XVorH2Bj8ek1/iLlgcmFMBOds+PrehSRR8Gn0IjlEg +C68EY6KPE+FKySuS7Ur7lTAjNdddfdAgKV6hJyST6/dx8ymIkb8nxCPnxCcT2I2N +vDxcPMc/wmnMa+smNal0sJ6m +-----END CERTIFICATE----- diff --git a/t/certs/4.key.pem b/t/certs/4.key.pem new file mode 100644 index 0000000000000000000000000000000000000000..3a3d4ba41dabb8c61e7653b4516981b2174e2a56 --- /dev/null +++ b/t/certs/4.key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQCwf6r8qHMwvNiKYpdnwxX0HzWapbBQ11+TKndmaexlXXJAsnyk +ub/MRfpn53JWRN+LzSog4iy/7zVS3BP44V4An5NHd7jfYGteus+K1C4IFhRpN58s +fmIqa0JKJomdjcEAKNR3BGIg7OJtwFjehtlH1G2stn0OkdHRb/TPVKFbwwIDAQAB +AoGBAIAppJrlIwggCUmrv++r3LQxOXZ7nCWHzzIJIzyt6+fLTFyofxQKgbiuk9+B +VChKyN02dMH+Gqqg4+KwRpxx4hRy03ahItP7/1bCw6MV9Kd+brj2Zk+QreFrUT+7 +DS8EgL5Hu96K/ksCL+eef9HOGlVWR1R+dfl8ciORRAqHAZ5pAkEA3YG7vG7Iu+nJ +hiONUoTderqTlFpBAV1bDk7cYYUIkdTfLkDIVetFXJOIQUmk0MpVvkjpgXpDjw+1 +XcJb1S70HQJBAMv7tVqoKaNf8P/KTc/xcmp4+qW4gzK1+BWDqo4dwzX9JR+u4mvX +ZBGR86A116wQDourRSchKlTVa+5v3QqSyV8CQCn7PZ6gDJF45MX0lQNPxT5OgEv8 +sxdUHz7d+WzOLuqcwtPcWVvXZGUAXTGqiH896fRPk1oD1ywVGRW1EXydEo0CQD/f +FB1L9KXEf+kIRq8rEkGGmi1UBjjVw9WwwbH4XczE9F/kWd+ctSfPRLLQyTSGXpeb +TG8BMokXvtENU/BgoA8CQQCWsTDPb1hWvL/GQA4wARlo+cQ73n1Uz6fzQJf2WBoV +7HSTpTULFpCaUJLyD3fvA8ofGvzD1mmKgxgsyBe494RA +-----END RSA PRIVATE KEY----- diff --git a/t/certs/4.pem b/t/certs/4.pem new file mode 100644 index 0000000000000000000000000000000000000000..7e55bacd0251ecd1c7a0efb22ff143ff133b1ad1 --- /dev/null +++ b/t/certs/4.pem @@ -0,0 +1,89 @@ +-----BEGIN CERTIFICATE----- +MIIJUTCCCDugAwIBAgIEaWasDzALBgkqhkiG9w0BAQUwKzELMAkGA1UEBhMCSVQx +DDAKBgNVBAoTA0lHSTEOMAwGA1UEAxMFdGVzdDAwHhcNMTgwMzE1MTYzNDM5WhcN +MjIwOTI0MTUzOTM0WjBAMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYD +VQQDEwV0ZXN0MDETMBEGA1UEAxMKMTc2ODMzNjM5OTCBnzANBgkqhkiG9w0BAQEF +AAOBjQAwgYkCgYEAsH+q/KhzMLzYimKXZ8MV9B81mqWwUNdfkyp3ZmnsZV1yQLJ8 +pLm/zEX6Z+dyVkTfi80qIOIsv+81UtwT+OFeAJ+TR3e432BrXrrPitQuCBYUaTef +LH5iKmtCSiaJnY3BACjUdwRiIOzibcBY3obZR9RtrLZ9DpHR0W/0z1ShW8MCAwEA +AaOCBu4wggbqMA4GA1UdDwEB/wQEAwIF4DAdBggrBgEFBQcBDgEB/wQOMAwwCgYI +KwYBBQUHFQEwgga3BgorBgEEAb5FZGQFBIIGpzCCBqMwggafMIIGmzCCBYMCAQEw +NqA0MC+kLTArMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYDVQQDEwV0 +ZXN0MAIBCaA4MDakNDAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUwEwYD +VQQDDAx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQELBQACAQAwIhgPMjAxODAxMDEw +MDAwMDBaGA8yMDMwMDEwMTAwMDAwMFowYzBhBgorBgEEAb5FZGQEMVMwUaAehhx0 +ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwMC8ECi90ZXN0L2V4cDEECi90ZXN0 +L2V4cDIEFS90ZXN0L2V4cDMvUm9sZT1QSVBQTzCCBG8wgYQGCisGAQQBvkVkZAsE +djB0MHIwcDAehhx0ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwME4wHgQIbmlj +a25hbWUECW5ld2xhbmQ4NgQHdGVzdC52bzAsBAV0aXRsZQQaYXNzZWduaXN0YSVk +aSVyaWNlcmNhQENOQUYEB3Rlc3Qudm8wggOyBgorBgEEAb5FZGQKBIIDojCCA54w +ggOaMIIDljCCAn6gAwIBAgICAxMwDQYJKoZIhvcNAQELBQAwLTELMAkGA1UEBhMC +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 +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQCwf6r8qHMwvNiKYpdnwxX0HzWapbBQ11+TKndmaexlXXJAsnyk +ub/MRfpn53JWRN+LzSog4iy/7zVS3BP44V4An5NHd7jfYGteus+K1C4IFhRpN58s +fmIqa0JKJomdjcEAKNR3BGIg7OJtwFjehtlH1G2stn0OkdHRb/TPVKFbwwIDAQAB +AoGBAIAppJrlIwggCUmrv++r3LQxOXZ7nCWHzzIJIzyt6+fLTFyofxQKgbiuk9+B +VChKyN02dMH+Gqqg4+KwRpxx4hRy03ahItP7/1bCw6MV9Kd+brj2Zk+QreFrUT+7 +DS8EgL5Hu96K/ksCL+eef9HOGlVWR1R+dfl8ciORRAqHAZ5pAkEA3YG7vG7Iu+nJ +hiONUoTderqTlFpBAV1bDk7cYYUIkdTfLkDIVetFXJOIQUmk0MpVvkjpgXpDjw+1 +XcJb1S70HQJBAMv7tVqoKaNf8P/KTc/xcmp4+qW4gzK1+BWDqo4dwzX9JR+u4mvX +ZBGR86A116wQDourRSchKlTVa+5v3QqSyV8CQCn7PZ6gDJF45MX0lQNPxT5OgEv8 +sxdUHz7d+WzOLuqcwtPcWVvXZGUAXTGqiH896fRPk1oD1ywVGRW1EXydEo0CQD/f +FB1L9KXEf+kIRq8rEkGGmi1UBjjVw9WwwbH4XczE9F/kWd+ctSfPRLLQyTSGXpeb +TG8BMokXvtENU/BgoA8CQQCWsTDPb1hWvL/GQA4wARlo+cQ73n1Uz6fzQJf2WBoV +7HSTpTULFpCaUJLyD3fvA8ofGvzD1mmKgxgsyBe494RA +-----END RSA PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgIBCTANBgkqhkiG9w0BAQUFADAtMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRAwDgYDVQQDDAdUZXN0IENBMB4XDTEyMDkyNjE1MzkzNFoX +DTIyMDkyNDE1MzkzNFowKzELMAkGA1UEBhMCSVQxDDAKBgNVBAoTA0lHSTEOMAwG +A1UEAxMFdGVzdDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKxtrw +hoZ27SxxISjlRqWmBWB6U+N/xW2kS1uUfrQRav6auVtmtEW45J44VTi3WW6Y113R +BwmS6oW+3lzyBBZVPqnhV9/VkTxLp83gGVVvHATgGgkjeTxIsOE+TkPKAoZJ/QFc +CfPh3WdZ3ANI14WYkAM9VXsSbh2okCsWGa4o6pzt3Pt1zKkyO4PW0cBkletDImJK +2vufuDVNm7Iz/y3/8pY8p3MoiwbF/PdSba7XQAxBWUJMoaleh8xy8HSROn7tF2al +xoDLH4QWhp6UDn2rvOWseBqUMPXFjsUi1/rkw1oHAjMroTk5lL15GI0LGd5dTVop +kKXFbTTYxSkPz1MLAgMBAAGjgcowgccwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU +fLdB5+jO9LyWN2/VCNYgMa0jvHEwDgYDVR0PAQH/BAQDAgXgMD4GA1UdJQQ3MDUG +CCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBBggrBgEF +BQcDBDAfBgNVHSMEGDAWgBSRdzZ7LrRp8yfqt/YIi0ojohFJxjAnBgNVHREEIDAe +gRxhbmRyZWEuY2VjY2FudGlAY25hZi5pbmZuLml0MA0GCSqGSIb3DQEBBQUAA4IB +AQANYtWXetheSeVpCfnId9TkKyKTAp8RahNZl4XFrWWn2S9We7ACK/G7u1DebJYx +d8POo8ClscoXyTO2BzHHZLxauEKIzUv7g2GehI+SckfZdjFyRXjD0+wMGwzX7MDu +SL3CG2aWsYpkBnj6BMlr0P3kZEMqV5t2+2Tj0+aXppBPVwzJwRhnrSJiO5WIZAZf +49YhMn61sQIrepvhrKEUR4XVorH2Bj8ek1/iLlgcmFMBOds+PrehSRR8Gn0IjlEg +C68EY6KPE+FKySuS7Ur7lTAjNdddfdAgKV6hJyST6/dx8ymIkb8nxCPnxCcT2I2N +vDxcPMc/wmnMa+smNal0sJ6m +-----END CERTIFICATE----- diff --git a/t/certs/5.cert.pem b/t/certs/5.cert.pem new file mode 100644 index 0000000000000000000000000000000000000000..b25264afa65b40e8692a0e91e9b68edef0aa08d9 --- /dev/null +++ b/t/certs/5.cert.pem @@ -0,0 +1,73 @@ +-----BEGIN CERTIFICATE----- +MIIJITCCCAugAwIBAgIEVBnC3jALBgkqhkiG9w0BAQUwKzELMAkGA1UEBhMCSVQx +DDAKBgNVBAoTA0lHSTEOMAwGA1UEAxMFdGVzdDAwHhcNMTgwMzE1MTcwNDE4WhcN +MjIwOTI0MTUzOTM0WjBAMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYD +VQQDEwV0ZXN0MDETMBEGA1UEAxMKMTQxMDk3NDQzMDCBnzANBgkqhkiG9w0BAQEF +AAOBjQAwgYkCgYEAjfmLCX/7rKN8l4qHZHtS/qbg1798BQFjhZzRE8gurDnXXYMJ +6c/hHvUzWzF2J36gIa946TQ3H5Rxvv41XMO/wPnpG2fhFpi5s5GZDjXNFtC5Qrt+ +OUvqUQgRRvfm8K/MwlFm2p+/kLhnIMuk1SnBSPO1tTwWWCJsrn/L2rKfwy0CAwEA +AaOCBr4wgga6MA4GA1UdDwEB/wQEAwIF4DAdBggrBgEFBQcBDgEB/wQOMAwwCgYI +KwYBBQUHFQEwggaHBgorBgEEAb5FZGQFBIIGdzCCBnMwggZvMIIGazCCBVMCAQEw +NqA0MC+kLTArMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYDVQQDEwV0 +ZXN0MAIBCaA4MDakNDAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUwEwYD +VQQDDAx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQEFBQACAXswIhgPMjAxODAxMDEw +MDAwMDBaGA8yMDMwMDEwMTAwMDAwMFowYzBhBgorBgEEAb5FZGQEMVMwUaAehhx0 +ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwMC8ECi90ZXN0L2V4cDEECi90ZXN0 +L2V4cDIEFS90ZXN0L2V4cDMvUm9sZT1QSVBQTzCCBD8wVAYKKwYBBAG+RWRkCwRG +MEQwQjBAMB6GHHRlc3Qudm86Ly92b21zLmV4YW1wbGU6MTUwMDAwHjAcBAhuaWNr +bmFtZQQHbmV3bGFuZAQHdGVzdC52bzCCA7MGCisGAQQBvkVkZAoEggOjMIIDnzCC +A5swggOXMIICf6ADAgECAgECMA0GCSqGSIb3DQEBBQUAMC8xCzAJBgNVBAYTAklU +MQwwCgYDVQQKDANJR0kxEjAQBgNVBAMMCVRlc3QgQ0EgMjAeFw0xODAzMTQxNjE4 +MzRaFw0yODAzMTExNjE4MzRaMDIxCzAJBgNVBAYTAklUMQwwCgYDVQQKDANJR0kx +FTATBgNVBAMMDHZvbXMuZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMoP18aRzBWhlzILIP2UEVdGWTp5Pu9Tq5soMGTavMULkCVn5UYGLc/d +QhUI8R7ti+XJyz3MSneSY6+slKfmiQZkDLwoUtFQSAJUW1ttng/uifQBISXqrK8G +pJLOMi8QVPY3An7g5yr9QpLI/1zx8oNim9l99gjLhD4DJqMBos6c3tk3Jn5sElAU +iEe8aJFq9tUFcOb9EAVlVkVvlSLS1FV3zPX6CKQ2LPqyR5BsxIQ2rCT42aiZZuBe +ljQeZUiGDxB76T0aP+pTn3AwDDCT0/ln0WZ8oEAo/msXct/VW6cPKLyS0cgxpmTg +0cAd9t24A7ExndgNVFbfaTXxVcyEUtECAwEAAaOBujCBtzAMBgNVHRMBAf8EAjAA +MB0GA1UdDgQWBBRf/uXVrKNs9BmoAn3wuJpn0KmhHzAOBgNVHQ8BAf8EBAMCBeAw +PgYDVR0lBDcwNQYIKwYBBQUHAwEGCCsGAQUFBwMCBgorBgEEAYI3CgMDBglghkgB +hvhCBAEGCCsGAQUFBwMEMB8GA1UdIwQYMBaAFDcDy5ZCOhSPvVtyKu7wa6htT4xE +MBcGA1UdEQQQMA6CDHZvbXMuZXhhbXBsZTANBgkqhkiG9w0BAQUFAAOCAQEA0nUh +VJDGiBUleUht0bpax1iksDVeMBrPuj82/B6ckatUyqg+Kjx1RFUqJ97nD9jIN5Gx +ZSq/gTdaD7Qx1ix94P/hNsTP17OjIL59uyau9lXfaEaDTJCD7m5dFkyrlAJhGLtI +4HjDzo6HMM2CGYpq2ZCk2wD87v2xyPEPCMZHeNp+LzPxjxaA8JehcvlabjASKCrD +ys2zx/Gr4du4FgFUt1+e315WJW7UcnikXcXqksBrpqq9BnNvX1cpONsT8X1RYK8h +/nn6pYzMEjR2MpIknp5tUVYtBSgJm8rXjvMi6qWAgmuDXio1U2e8BVusDiRIGu+Y +luWKfyhkHq7sERhmRTAJBgNVHTgEAgUAMCUGA1UdIwQeMByAGgQYMBaAFDcDy5ZC +OhSPvVtyKu7wa6htT4xEMA0GCSqGSIb3DQEBBQUAA4IBAQAesk/1rW0Umm15WUfM +UcT6JwZfTDAoWGhhtPsHplDQg+VBonwJtn0S8CfaMFj2kPk+2QtRHFVT/cEiMrtC +RrLEqhXBu5p20m3Cn9mWQRMflwqFTVa+j4cQG2m9ed6EBYtwP7NngWKWaGdcVdym +Kq2zRpSiUKWUOMhJir4evO3+BDMUV6FPXxXYmnVtCNY1R7pYDm+QJHzt94WbCIfb +jSS+f4Y7/a8veQLVVj1YFcCOWa/KxoQUE4KLCw8HCVGifE97L2MYU7G69o/Uf1YW +vXDZRZUsPG/PxkdhYfooiPVdpAvmlhrbeTOcSnmImvsvXyJf/8RPRERpjN9lSrhC +hAE9MAsGCSqGSIb3DQEBBQOCAQEAqstqHQSjeHfslXxCH4YMnb2FP2n7iCGqO8tB +qxUqYVCcbBlLT+Dy8IngHVKpl4Nubmduw+0UY45TIT+9PG99UJM7jkQWB9V79CZ7 +ZPqGalQmTzl7SRZsPervhN8spKgcKhWMk9v3GioVGFDj+4ujtUzcCYKfLfH8LS24 +hES0fUIxJSM2wWwmRIHeD5skGtQNnGoggptWywTgemLq15V7wfU6YIbs8DLiBU1N +a7b3ahC2ydHH/LrPO5D5wLKMmS7/btLk51Fs5Sj60kX1lhfzrmEPUortu5rqTV40 +gG9671U+lbzh4sMo1DNWEvN6Es/grnxWnPlwC7qYHk/DGTQZfQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgIBCTANBgkqhkiG9w0BAQUFADAtMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRAwDgYDVQQDDAdUZXN0IENBMB4XDTEyMDkyNjE1MzkzNFoX +DTIyMDkyNDE1MzkzNFowKzELMAkGA1UEBhMCSVQxDDAKBgNVBAoTA0lHSTEOMAwG +A1UEAxMFdGVzdDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKxtrw +hoZ27SxxISjlRqWmBWB6U+N/xW2kS1uUfrQRav6auVtmtEW45J44VTi3WW6Y113R +BwmS6oW+3lzyBBZVPqnhV9/VkTxLp83gGVVvHATgGgkjeTxIsOE+TkPKAoZJ/QFc +CfPh3WdZ3ANI14WYkAM9VXsSbh2okCsWGa4o6pzt3Pt1zKkyO4PW0cBkletDImJK +2vufuDVNm7Iz/y3/8pY8p3MoiwbF/PdSba7XQAxBWUJMoaleh8xy8HSROn7tF2al +xoDLH4QWhp6UDn2rvOWseBqUMPXFjsUi1/rkw1oHAjMroTk5lL15GI0LGd5dTVop +kKXFbTTYxSkPz1MLAgMBAAGjgcowgccwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU +fLdB5+jO9LyWN2/VCNYgMa0jvHEwDgYDVR0PAQH/BAQDAgXgMD4GA1UdJQQ3MDUG +CCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBBggrBgEF +BQcDBDAfBgNVHSMEGDAWgBSRdzZ7LrRp8yfqt/YIi0ojohFJxjAnBgNVHREEIDAe +gRxhbmRyZWEuY2VjY2FudGlAY25hZi5pbmZuLml0MA0GCSqGSIb3DQEBBQUAA4IB +AQANYtWXetheSeVpCfnId9TkKyKTAp8RahNZl4XFrWWn2S9We7ACK/G7u1DebJYx +d8POo8ClscoXyTO2BzHHZLxauEKIzUv7g2GehI+SckfZdjFyRXjD0+wMGwzX7MDu +SL3CG2aWsYpkBnj6BMlr0P3kZEMqV5t2+2Tj0+aXppBPVwzJwRhnrSJiO5WIZAZf +49YhMn61sQIrepvhrKEUR4XVorH2Bj8ek1/iLlgcmFMBOds+PrehSRR8Gn0IjlEg +C68EY6KPE+FKySuS7Ur7lTAjNdddfdAgKV6hJyST6/dx8ymIkb8nxCPnxCcT2I2N +vDxcPMc/wmnMa+smNal0sJ6m +-----END CERTIFICATE----- diff --git a/t/certs/5.key.pem b/t/certs/5.key.pem new file mode 100644 index 0000000000000000000000000000000000000000..d9a7313fc32c890df3cf52e89644f9cab7ec26cf --- /dev/null +++ b/t/certs/5.key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCN+YsJf/uso3yXiodke1L+puDXv3wFAWOFnNETyC6sOdddgwnp +z+Ee9TNbMXYnfqAhr3jpNDcflHG+/jVcw7/A+ekbZ+EWmLmzkZkONc0W0LlCu345 +S+pRCBFG9+bwr8zCUWban7+QuGcgy6TVKcFI87W1PBZYImyuf8vasp/DLQIDAQAB +AoGBAIYeFGAXDNLbZhlp/djIP3DciE6HT0sTMsbHiyLa2mxL/80Qus6rWAj8rVUa +dnl8vxzTPK9gaipk+sboMdS9/meB/I+o5MtkzW6QNvZc5N9gTB+tJoaYwTXi6Otr +VGePoBjmHUENtUnR/eJ5IPyhjbzZJurX6EYXVwzF6J4DXiCpAkEA+7gzHS8rLm6e +wHYqc8KKJDdDnI464GTZyD/UVa40S9QU6tX7aRNPBwyyC8Wo23ljnfc3qsiBXpdd +l25YLXseRwJBAJBjmJqISXB1l5OTawpVQpxM75e4k79SoIZTT7Mq8A/RC4V8sClB +5a7XIpP1vjqa1a8td3G/xpLi4wLS4QWxSOsCQAmq4GOtjRYCb5xqrWS2wwFzEeiw +WbiGhwq20NvdjeqfoZIHV9mIQU+/ABONqteLCPVnKj8n5jgQzipjtYVBpj8CQFqG +pwnUAr9IarUyyvyagf2+2sS0C6X7ZvtwxlpdxE8WUHPrvgLP9vIMnfhILXFO3ERN +bELb6uLy70M49a38/esCQBNngfqmh4dxMWA811Nlw0eXu47CcFVY7T71rZBBEe+T ++1M/Du1Y5Qqj5wnvezmMdpGD9apHfmPnqAJRSKbYmoY= +-----END RSA PRIVATE KEY----- diff --git a/t/certs/5.pem b/t/certs/5.pem new file mode 100644 index 0000000000000000000000000000000000000000..8bc2d80fa63d8ea975d727dc8e54baa0a5c9f6db --- /dev/null +++ b/t/certs/5.pem @@ -0,0 +1,88 @@ +-----BEGIN CERTIFICATE----- +MIIJITCCCAugAwIBAgIEVBnC3jALBgkqhkiG9w0BAQUwKzELMAkGA1UEBhMCSVQx +DDAKBgNVBAoTA0lHSTEOMAwGA1UEAxMFdGVzdDAwHhcNMTgwMzE1MTcwNDE4WhcN +MjIwOTI0MTUzOTM0WjBAMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYD +VQQDEwV0ZXN0MDETMBEGA1UEAxMKMTQxMDk3NDQzMDCBnzANBgkqhkiG9w0BAQEF +AAOBjQAwgYkCgYEAjfmLCX/7rKN8l4qHZHtS/qbg1798BQFjhZzRE8gurDnXXYMJ +6c/hHvUzWzF2J36gIa946TQ3H5Rxvv41XMO/wPnpG2fhFpi5s5GZDjXNFtC5Qrt+ +OUvqUQgRRvfm8K/MwlFm2p+/kLhnIMuk1SnBSPO1tTwWWCJsrn/L2rKfwy0CAwEA +AaOCBr4wgga6MA4GA1UdDwEB/wQEAwIF4DAdBggrBgEFBQcBDgEB/wQOMAwwCgYI +KwYBBQUHFQEwggaHBgorBgEEAb5FZGQFBIIGdzCCBnMwggZvMIIGazCCBVMCAQEw +NqA0MC+kLTArMQswCQYDVQQGEwJJVDEMMAoGA1UEChMDSUdJMQ4wDAYDVQQDEwV0 +ZXN0MAIBCaA4MDakNDAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUwEwYD +VQQDDAx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQEFBQACAXswIhgPMjAxODAxMDEw +MDAwMDBaGA8yMDMwMDEwMTAwMDAwMFowYzBhBgorBgEEAb5FZGQEMVMwUaAehhx0 +ZXN0LnZvOi8vdm9tcy5leGFtcGxlOjE1MDAwMC8ECi90ZXN0L2V4cDEECi90ZXN0 +L2V4cDIEFS90ZXN0L2V4cDMvUm9sZT1QSVBQTzCCBD8wVAYKKwYBBAG+RWRkCwRG +MEQwQjBAMB6GHHRlc3Qudm86Ly92b21zLmV4YW1wbGU6MTUwMDAwHjAcBAhuaWNr +bmFtZQQHbmV3bGFuZAQHdGVzdC52bzCCA7MGCisGAQQBvkVkZAoEggOjMIIDnzCC +A5swggOXMIICf6ADAgECAgECMA0GCSqGSIb3DQEBBQUAMC8xCzAJBgNVBAYTAklU +MQwwCgYDVQQKDANJR0kxEjAQBgNVBAMMCVRlc3QgQ0EgMjAeFw0xODAzMTQxNjE4 +MzRaFw0yODAzMTExNjE4MzRaMDIxCzAJBgNVBAYTAklUMQwwCgYDVQQKDANJR0kx +FTATBgNVBAMMDHZvbXMuZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMoP18aRzBWhlzILIP2UEVdGWTp5Pu9Tq5soMGTavMULkCVn5UYGLc/d +QhUI8R7ti+XJyz3MSneSY6+slKfmiQZkDLwoUtFQSAJUW1ttng/uifQBISXqrK8G +pJLOMi8QVPY3An7g5yr9QpLI/1zx8oNim9l99gjLhD4DJqMBos6c3tk3Jn5sElAU +iEe8aJFq9tUFcOb9EAVlVkVvlSLS1FV3zPX6CKQ2LPqyR5BsxIQ2rCT42aiZZuBe +ljQeZUiGDxB76T0aP+pTn3AwDDCT0/ln0WZ8oEAo/msXct/VW6cPKLyS0cgxpmTg +0cAd9t24A7ExndgNVFbfaTXxVcyEUtECAwEAAaOBujCBtzAMBgNVHRMBAf8EAjAA +MB0GA1UdDgQWBBRf/uXVrKNs9BmoAn3wuJpn0KmhHzAOBgNVHQ8BAf8EBAMCBeAw +PgYDVR0lBDcwNQYIKwYBBQUHAwEGCCsGAQUFBwMCBgorBgEEAYI3CgMDBglghkgB +hvhCBAEGCCsGAQUFBwMEMB8GA1UdIwQYMBaAFDcDy5ZCOhSPvVtyKu7wa6htT4xE +MBcGA1UdEQQQMA6CDHZvbXMuZXhhbXBsZTANBgkqhkiG9w0BAQUFAAOCAQEA0nUh +VJDGiBUleUht0bpax1iksDVeMBrPuj82/B6ckatUyqg+Kjx1RFUqJ97nD9jIN5Gx +ZSq/gTdaD7Qx1ix94P/hNsTP17OjIL59uyau9lXfaEaDTJCD7m5dFkyrlAJhGLtI +4HjDzo6HMM2CGYpq2ZCk2wD87v2xyPEPCMZHeNp+LzPxjxaA8JehcvlabjASKCrD +ys2zx/Gr4du4FgFUt1+e315WJW7UcnikXcXqksBrpqq9BnNvX1cpONsT8X1RYK8h +/nn6pYzMEjR2MpIknp5tUVYtBSgJm8rXjvMi6qWAgmuDXio1U2e8BVusDiRIGu+Y +luWKfyhkHq7sERhmRTAJBgNVHTgEAgUAMCUGA1UdIwQeMByAGgQYMBaAFDcDy5ZC +OhSPvVtyKu7wa6htT4xEMA0GCSqGSIb3DQEBBQUAA4IBAQAesk/1rW0Umm15WUfM +UcT6JwZfTDAoWGhhtPsHplDQg+VBonwJtn0S8CfaMFj2kPk+2QtRHFVT/cEiMrtC +RrLEqhXBu5p20m3Cn9mWQRMflwqFTVa+j4cQG2m9ed6EBYtwP7NngWKWaGdcVdym +Kq2zRpSiUKWUOMhJir4evO3+BDMUV6FPXxXYmnVtCNY1R7pYDm+QJHzt94WbCIfb +jSS+f4Y7/a8veQLVVj1YFcCOWa/KxoQUE4KLCw8HCVGifE97L2MYU7G69o/Uf1YW +vXDZRZUsPG/PxkdhYfooiPVdpAvmlhrbeTOcSnmImvsvXyJf/8RPRERpjN9lSrhC +hAE9MAsGCSqGSIb3DQEBBQOCAQEAqstqHQSjeHfslXxCH4YMnb2FP2n7iCGqO8tB +qxUqYVCcbBlLT+Dy8IngHVKpl4Nubmduw+0UY45TIT+9PG99UJM7jkQWB9V79CZ7 +ZPqGalQmTzl7SRZsPervhN8spKgcKhWMk9v3GioVGFDj+4ujtUzcCYKfLfH8LS24 +hES0fUIxJSM2wWwmRIHeD5skGtQNnGoggptWywTgemLq15V7wfU6YIbs8DLiBU1N +a7b3ahC2ydHH/LrPO5D5wLKMmS7/btLk51Fs5Sj60kX1lhfzrmEPUortu5rqTV40 +gG9671U+lbzh4sMo1DNWEvN6Es/grnxWnPlwC7qYHk/DGTQZfQ== +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCN+YsJf/uso3yXiodke1L+puDXv3wFAWOFnNETyC6sOdddgwnp +z+Ee9TNbMXYnfqAhr3jpNDcflHG+/jVcw7/A+ekbZ+EWmLmzkZkONc0W0LlCu345 +S+pRCBFG9+bwr8zCUWban7+QuGcgy6TVKcFI87W1PBZYImyuf8vasp/DLQIDAQAB +AoGBAIYeFGAXDNLbZhlp/djIP3DciE6HT0sTMsbHiyLa2mxL/80Qus6rWAj8rVUa +dnl8vxzTPK9gaipk+sboMdS9/meB/I+o5MtkzW6QNvZc5N9gTB+tJoaYwTXi6Otr +VGePoBjmHUENtUnR/eJ5IPyhjbzZJurX6EYXVwzF6J4DXiCpAkEA+7gzHS8rLm6e +wHYqc8KKJDdDnI464GTZyD/UVa40S9QU6tX7aRNPBwyyC8Wo23ljnfc3qsiBXpdd +l25YLXseRwJBAJBjmJqISXB1l5OTawpVQpxM75e4k79SoIZTT7Mq8A/RC4V8sClB +5a7XIpP1vjqa1a8td3G/xpLi4wLS4QWxSOsCQAmq4GOtjRYCb5xqrWS2wwFzEeiw +WbiGhwq20NvdjeqfoZIHV9mIQU+/ABONqteLCPVnKj8n5jgQzipjtYVBpj8CQFqG +pwnUAr9IarUyyvyagf2+2sS0C6X7ZvtwxlpdxE8WUHPrvgLP9vIMnfhILXFO3ERN +bELb6uLy70M49a38/esCQBNngfqmh4dxMWA811Nlw0eXu47CcFVY7T71rZBBEe+T ++1M/Du1Y5Qqj5wnvezmMdpGD9apHfmPnqAJRSKbYmoY= +-----END RSA PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgIBCTANBgkqhkiG9w0BAQUFADAtMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRAwDgYDVQQDDAdUZXN0IENBMB4XDTEyMDkyNjE1MzkzNFoX +DTIyMDkyNDE1MzkzNFowKzELMAkGA1UEBhMCSVQxDDAKBgNVBAoTA0lHSTEOMAwG +A1UEAxMFdGVzdDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKxtrw +hoZ27SxxISjlRqWmBWB6U+N/xW2kS1uUfrQRav6auVtmtEW45J44VTi3WW6Y113R +BwmS6oW+3lzyBBZVPqnhV9/VkTxLp83gGVVvHATgGgkjeTxIsOE+TkPKAoZJ/QFc +CfPh3WdZ3ANI14WYkAM9VXsSbh2okCsWGa4o6pzt3Pt1zKkyO4PW0cBkletDImJK +2vufuDVNm7Iz/y3/8pY8p3MoiwbF/PdSba7XQAxBWUJMoaleh8xy8HSROn7tF2al +xoDLH4QWhp6UDn2rvOWseBqUMPXFjsUi1/rkw1oHAjMroTk5lL15GI0LGd5dTVop +kKXFbTTYxSkPz1MLAgMBAAGjgcowgccwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU +fLdB5+jO9LyWN2/VCNYgMa0jvHEwDgYDVR0PAQH/BAQDAgXgMD4GA1UdJQQ3MDUG +CCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBBggrBgEF +BQcDBDAfBgNVHSMEGDAWgBSRdzZ7LrRp8yfqt/YIi0ojohFJxjAnBgNVHREEIDAe +gRxhbmRyZWEuY2VjY2FudGlAY25hZi5pbmZuLml0MA0GCSqGSIb3DQEBBQUAA4IB +AQANYtWXetheSeVpCfnId9TkKyKTAp8RahNZl4XFrWWn2S9We7ACK/G7u1DebJYx +d8POo8ClscoXyTO2BzHHZLxauEKIzUv7g2GehI+SckfZdjFyRXjD0+wMGwzX7MDu +SL3CG2aWsYpkBnj6BMlr0P3kZEMqV5t2+2Tj0+aXppBPVwzJwRhnrSJiO5WIZAZf +49YhMn61sQIrepvhrKEUR4XVorH2Bj8ek1/iLlgcmFMBOds+PrehSRR8Gn0IjlEg +C68EY6KPE+FKySuS7Ur7lTAjNdddfdAgKV6hJyST6/dx8ymIkb8nxCPnxCcT2I2N +vDxcPMc/wmnMa+smNal0sJ6m +-----END CERTIFICATE----- diff --git a/t/certs/README.md b/t/certs/README.md index b23d8ee80f41691f24b2d130d3b5419b7f963b0a..7b3f68a8821b5c8ba0e99a413b62f594956a6df3 100644 --- a/t/certs/README.md +++ b/t/certs/README.md @@ -6,11 +6,21 @@ Proxy certificates are generated using [VOMS client 3.3.0](http://italiangrid.gi * 0.pem: long-lived proxy certificate, without Attribute Certificate (AC); * 1.pem: long-lived proxy certificate, with an expired AC; * 2.pem: expired proxy certificate. + * 3.pem: long-lived proxy with valid VOMS attributes + * 4.pem: long-lived proxy with VOMS generic attributes containing reserved characters + * 5.pem: long-lived proxy with VOMS AC signed by an untrusted CA To obtain such certificates the following command is used: VOMS_CLIENTS_JAVA_OPTIONS="-Dvoms.fake.vo=test.vo -Dvoms.fake=true -Dvoms.fake.aaCert=<path_to_cert>/voms_example.cert.pem -Dvoms.fake.aaKey=<path_to_key>/voms_example.key.pem" voms-proxy-init3 -voms test.vo -cert <path_to_test0>/test0.p12 --valid <validity> +Once VOMS proxy certificates are generated in a `*.pem` format, they need to be split in certificates and key to be used in Openresty tests. `*.cert.pem` and `*.key.pem` files are obtained by simpling typing + + awk '/BEGIN RSA PRIVATE KEY/,/END RSA PRIVATE KEY/' <name>.pem > <name>.key.pem + awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/' <name>.pem > <name>.cert.pem + +in the `certs` folder, where `<name>` could be for instance `0,1,2` etc. + *voms\_example.cert.pem* and *voms\_example.ket.pem* can be found in the `certs` folder. To perform correctly the VOMS AC validation, a \*.lsc or \*.pem file is needed in `/etc/grid-security/vomsdir`, see [VOMS client 3.3.0 User Guide](http://italiangrid.github.io/voms/documentation/voms-clients-guide/3.0.3/) for further details. An example of *voms.example.lsc* can be found in `vomsdir/test.vo`. diff --git a/t/certs/voms_example_2.cert.pem b/t/certs/voms_example_2.cert.pem new file mode 100644 index 0000000000000000000000000000000000000000..cfca8b81c43bd9fbc77fff4efae89f8ad538c818 --- /dev/null +++ b/t/certs/voms_example_2.cert.pem @@ -0,0 +1,85 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 2 (0x2) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=IT, O=IGI, CN=Test CA 2 + Validity + Not Before: Mar 14 16:18:34 2018 GMT + Not After : Mar 11 16:18:34 2028 GMT + Subject: C=IT, O=IGI, CN=voms.example + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ca:0f:d7:c6:91:cc:15:a1:97:32:0b:20:fd:94: + 11:57:46:59:3a:79:3e:ef:53:ab:9b:28:30:64:da: + bc:c5:0b:90:25:67:e5:46:06:2d:cf:dd:42:15:08: + f1:1e:ed:8b:e5:c9:cb:3d:cc:4a:77:92:63:af:ac: + 94:a7:e6:89:06:64:0c:bc:28:52:d1:50:48:02:54: + 5b:5b:6d:9e:0f:ee:89:f4:01:21:25:ea:ac:af:06: + a4:92:ce:32:2f:10:54:f6:37:02:7e:e0:e7:2a:fd: + 42:92:c8:ff:5c:f1:f2:83:62:9b:d9:7d:f6:08:cb: + 84:3e:03:26:a3:01:a2:ce:9c:de:d9:37:26:7e:6c: + 12:50:14:88:47:bc:68:91:6a:f6:d5:05:70:e6:fd: + 10:05:65:56:45:6f:95:22:d2:d4:55:77:cc:f5:fa: + 08:a4:36:2c:fa:b2:47:90:6c:c4:84:36:ac:24:f8: + d9:a8:99:66:e0:5e:96:34:1e:65:48:86:0f:10:7b: + e9:3d:1a:3f:ea:53:9f:70:30:0c:30:93:d3:f9:67: + d1:66:7c:a0:40:28:fe:6b:17:72:df:d5:5b:a7:0f: + 28:bc:92:d1:c8:31:a6:64:e0:d1:c0:1d:f6:dd:b8: + 03:b1:31:9d:d8:0d:54:56:df:69:35:f1:55:cc:84: + 52:d1 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Subject Key Identifier: + 5F:FE:E5:D5:AC:A3:6C:F4:19:A8:02:7D:F0:B8:9A:67:D0:A9:A1:1F + X509v3 Key Usage: critical + Digital Signature, Non Repudiation, Key Encipherment + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication, Microsoft Server Gated Crypto, Netscape Server Gated Crypto, E-mail Protection + X509v3 Authority Key Identifier: + keyid:37:03:CB:96:42:3A:14:8F:BD:5B:72:2A:EE:F0:6B:A8:6D:4F:8C:44 + + X509v3 Subject Alternative Name: + DNS:voms.example + Signature Algorithm: sha1WithRSAEncryption + d2:75:21:54:90:c6:88:15:25:79:48:6d:d1:ba:5a:c7:58:a4: + b0:35:5e:30:1a:cf:ba:3f:36:fc:1e:9c:91:ab:54:ca:a8:3e: + 2a:3c:75:44:55:2a:27:de:e7:0f:d8:c8:37:91:b1:65:2a:bf: + 81:37:5a:0f:b4:31:d6:2c:7d:e0:ff:e1:36:c4:cf:d7:b3:a3: + 20:be:7d:bb:26:ae:f6:55:df:68:46:83:4c:90:83:ee:6e:5d: + 16:4c:ab:94:02:61:18:bb:48:e0:78:c3:ce:8e:87:30:cd:82: + 19:8a:6a:d9:90:a4:db:00:fc:ee:fd:b1:c8:f1:0f:08:c6:47: + 78:da:7e:2f:33:f1:8f:16:80:f0:97:a1:72:f9:5a:6e:30:12: + 28:2a:c3:ca:cd:b3:c7:f1:ab:e1:db:b8:16:01:54:b7:5f:9e: + df:5e:56:25:6e:d4:72:78:a4:5d:c5:ea:92:c0:6b:a6:aa:bd: + 06:73:6f:5f:57:29:38:db:13:f1:7d:51:60:af:21:fe:79:fa: + a5:8c:cc:12:34:76:32:92:24:9e:9e:6d:51:56:2d:05:28:09: + 9b:ca:d7:8e:f3:22:ea:a5:80:82:6b:83:5e:2a:35:53:67:bc: + 05:5b:ac:0e:24:48:1a:ef:98:96:e5:8a:7f:28:64:1e:ae:ec: + 11:18:66:45 +-----BEGIN CERTIFICATE----- +MIIDlzCCAn+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADAvMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRIwEAYDVQQDDAlUZXN0IENBIDIwHhcNMTgwMzE0MTYxODM0 +WhcNMjgwMzExMTYxODM0WjAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUw +EwYDVQQDDAx2b21zLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDKD9fGkcwVoZcyCyD9lBFXRlk6eT7vU6ubKDBk2rzFC5AlZ+VGBi3P3UIV +CPEe7Yvlycs9zEp3kmOvrJSn5okGZAy8KFLRUEgCVFtbbZ4P7on0ASEl6qyvBqSS +zjIvEFT2NwJ+4Ocq/UKSyP9c8fKDYpvZffYIy4Q+AyajAaLOnN7ZNyZ+bBJQFIhH +vGiRavbVBXDm/RAFZVZFb5Ui0tRVd8z1+gikNiz6skeQbMSENqwk+NmomWbgXpY0 +HmVIhg8Qe+k9Gj/qU59wMAwwk9P5Z9FmfKBAKP5rF3Lf1VunDyi8ktHIMaZk4NHA +HfbduAOxMZ3YDVRW32k18VXMhFLRAgMBAAGjgbowgbcwDAYDVR0TAQH/BAIwADAd +BgNVHQ4EFgQUX/7l1ayjbPQZqAJ98LiaZ9CpoR8wDgYDVR0PAQH/BAQDAgXgMD4G +A1UdJQQ3MDUGCCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4 +QgQBBggrBgEFBQcDBDAfBgNVHSMEGDAWgBQ3A8uWQjoUj71bciru8GuobU+MRDAX +BgNVHREEEDAOggx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQEFBQADggEBANJ1IVSQ +xogVJXlIbdG6WsdYpLA1XjAaz7o/NvwenJGrVMqoPio8dURVKife5w/YyDeRsWUq +v4E3Wg+0MdYsfeD/4TbEz9ezoyC+fbsmrvZV32hGg0yQg+5uXRZMq5QCYRi7SOB4 +w86OhzDNghmKatmQpNsA/O79scjxDwjGR3jafi8z8Y8WgPCXoXL5Wm4wEigqw8rN +s8fxq+HbuBYBVLdfnt9eViVu1HJ4pF3F6pLAa6aqvQZzb19XKTjbE/F9UWCvIf55 ++qWMzBI0djKSJJ6ebVFWLQUoCZvK147zIuqlgIJrg14qNVNnvAVbrA4kSBrvmJbl +in8oZB6u7BEYZkU= +-----END CERTIFICATE----- diff --git a/t/certs/voms_example_2.key.pem b/t/certs/voms_example_2.key.pem new file mode 100644 index 0000000000000000000000000000000000000000..9496d59d8bcd54cb8bbb5ebc75109080f19490d9 --- /dev/null +++ b/t/certs/voms_example_2.key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAyg/XxpHMFaGXMgsg/ZQRV0ZZOnk+71OrmygwZNq8xQuQJWfl +RgYtz91CFQjxHu2L5cnLPcxKd5Jjr6yUp+aJBmQMvChS0VBIAlRbW22eD+6J9AEh +Jeqsrwakks4yLxBU9jcCfuDnKv1Cksj/XPHyg2Kb2X32CMuEPgMmowGizpze2Tcm +fmwSUBSIR7xokWr21QVw5v0QBWVWRW+VItLUVXfM9foIpDYs+rJHkGzEhDasJPjZ +qJlm4F6WNB5lSIYPEHvpPRo/6lOfcDAMMJPT+WfRZnygQCj+axdy39Vbpw8ovJLR +yDGmZODRwB323bgDsTGd2A1UVt9pNfFVzIRS0QIDAQABAoIBAC16D1hTrBkaO0s6 +EfzAfH6mCKMOcsmujSroiqvIR0AZ8CFbFtEBxwHHjH3re0k4sYnQNvv7pK7wtZru +Pq7jRee4UN1wPeN6LBrKHZ2gODjhuQ6/ylQcUy05U4Tu/4B0LosTqm4f9CdKxNcA +gejLU4eag/UZUmx8UZEbaHC7h4b0hQxu0EKEYZGo34azLRBaBqREtm2FpVk9ycJk ++Ij4a+qUfwCDJl8Z61hh4BNT7tWJVy5R61qxlD5Y9+thG7p2pgLCAyXVskgYfwCV +/AYOblWM9mEKpfnhEkhG0e2AO9/jOSsVaXWbiKC4tq59Lh3s6P5c0vlM4lMG4ZRS +axWVRBkCgYEA6xU9AaW5sd8gtOk1zpKVga5PdcewkCMj4eABZvuXW4B2wJr3KDIi +TYAZFqz6t7yy7VxhR75lXECbmyFB1uoHxt9yl+yY6R0IQEKsLA9xvEw2Xzqr7gch +Tfv+sQsIoW+nl5Z4TTrNMRoBwvzTZNkBSUQXRhOOfWhQUKJ/ZrDvS6MCgYEA3Apx +0YPQrb5r8V4hu6OyPhfUp3ZsoKvOyLVKKv7Yhx2u/yXCtsCXP+c5sNDFN3vxoWxX +8uOgZUrwhKF5ieYSQB0uSZONzHGtItRtaAaSGdQ4s7UDbWFHEfxR9XE1ZP8m/A5Z +wN0knnTQjve1ZyovTSGSs0zzRQoZaYmw6WFYzvsCgYEA1S46V48Y+WNVPpmpsL2f +FK2k4zMGO3+SX5gKzX/j/xddGUauUWY9UziSB80vw4U8YSGAGlZfhqwUMDaVhTZP +fRpOydTFycgJHnUXuxD6W/5k5DDJjx4qJpUZnyVZW0Rsn3vVdnuXbiqeZFtvvClK +EE3OKT883R7Gjoj9rXtQVa8CgYEAkLtiACCGyzFcSMfUwlo67HK6UmgnrUs02Xm9 +TiiQfdc9et/4gkKNed/6Z136yrMAzV+5Pa8Rmm6/Y03e5qBpUrie8JBYjagb7LPz +PqBLyyd3IGUo2vJIUAE6W4naSBM4LkS2LpCG/J7za4ZtUG1D7aTunHc58ChjbLK/ +pdJ9Gq8CgYEAmQHYXsVzjhxLDdYJGj4Dg2abaSL4y0e+76zP/AVfeNHfAoztm2w2 +WJm5Xdf1NFEP+aopuGl9D4ikGvZ5bHscAgj/L3rbrOCz1XAmIwAcpcPE782vV1Pe +AEM7dszw7BXxvh5Fld1SJcC+/bUW7JTRzPRJmfz/jF/AF4SKkE9yk6Q= +-----END RSA PRIVATE KEY----- diff --git a/t/encoding.t b/t/encoding.t new file mode 100644 index 0000000000000000000000000000000000000000..dfd9e4de6a6ebddeb6131d11d466a66b03aab362 --- /dev/null +++ b/t/encoding.t @@ -0,0 +1,37 @@ + +use Test::Nginx::Socket 'no_plan'; + +run_tests(); + +__DATA__ + +=== TEST 1: valid AC, verification of VOMS generic attributes encoding +--- main_config + env OPENSSL_ALLOW_PROXY_CERTS=1; + env X509_VOMS_DIR=t/vomsdir; + env X509_CERT_DIR=t/trust-anchors; +--- http_config + server { + error_log logs/error.log debug; + listen 8443 ssl; + ssl_certificate ../../certs/nginx_voms_example.cert.pem; + ssl_certificate_key ../../certs/nginx_voms_example.key.pem; + ssl_client_certificate ../../trust-anchors/igi-test-ca.pem; + ssl_verify_depth 10; + ssl_verify_client on; + location = / { + default_type text/plain; + echo $voms_generic_attributes; + } + } +--- config + location = / { + proxy_pass https://localhost:8443/; + proxy_ssl_certificate ../../certs/4.cert.pem; + proxy_ssl_certificate_key ../../certs/4.key.pem; + } +--- request +GET / +--- response_body +n=nickname v=newland86 q=test.vo,n=title v=assegnista%25di%25ricerca%40CNAF q=test.vo +--- error_code: 200 diff --git a/t/expired_proxy.t b/t/expired.t similarity index 100% rename from t/expired_proxy.t rename to t/expired.t diff --git a/t/expired_ac_proxy.t b/t/expired_ac.t similarity index 100% rename from t/expired_ac_proxy.t rename to t/expired_ac.t diff --git a/t/empty_voms_proxy.t b/t/no_ac.t similarity index 100% rename from t/empty_voms_proxy.t rename to t/no_ac.t diff --git a/t/no_ssl.t b/t/no_ssl.t new file mode 100644 index 0000000000000000000000000000000000000000..26c696a10b430331e155f4fd0f884ec86c18afa4 --- /dev/null +++ b/t/no_ssl.t @@ -0,0 +1,31 @@ + +use Test::Nginx::Socket 'no_plan'; + +run_tests(); + +__DATA__ + +=== TEST 1: HTTP connection, no SSL +--- main_config + env OPENSSL_ALLOW_PROXY_CERTS=1; + env X509_VOMS_DIR=t/vomsdir; +--- http_config + server { + error_log logs/error.log debug; + listen 8443; + location = / { + default_type text/plain; + echo $voms_user; + } + } +--- config + location = / { + proxy_pass http://localhost:8443/; + } +--- request +GET / +--- response_body_like eval +qr/\n/ +--- error_log +SSL not enabled +--- error_code: 200 diff --git a/t/pippo b/t/pippo new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/t/ssl_no_client_authn.t b/t/ssl_no_client_authn.t new file mode 100644 index 0000000000000000000000000000000000000000..e1042d60603ee70be8fb79af099ff1348365a497 --- /dev/null +++ b/t/ssl_no_client_authn.t @@ -0,0 +1,35 @@ + +use Test::Nginx::Socket 'no_plan'; + +run_tests(); + +__DATA__ + +=== TEST 1: HTTPS with no X.509 client authentication +--- main_config + env OPENSSL_ALLOW_PROXY_CERTS=1; + env X509_VOMS_DIR=t/vomsdir; +--- http_config + server { + error_log logs/error.log debug; + listen 8443 ssl; + ssl_certificate ../../certs/nginx_voms_example.cert.pem; + ssl_certificate_key ../../certs/nginx_voms_example.key.pem; + ssl_client_certificate ../../trust-anchors/igi-test-ca.pem; + ssl_verify_depth 10; + location = / { + default_type text/plain; + echo $voms_user; + } + } +--- config + location = / { + proxy_pass https://localhost:8443/; + } +--- request +GET / +--- response_body_like eval +qr/\n/ +--- error_log +no SSL peer certificate available +--- error_code: 200 diff --git a/t/trust-anchors/21ca5d6a.0 b/t/trust-anchors/21ca5d6a.0 new file mode 120000 index 0000000000000000000000000000000000000000..4d8fbd9ffc99a32048f97f8f1b3b1ebcb580631c --- /dev/null +++ b/t/trust-anchors/21ca5d6a.0 @@ -0,0 +1 @@ +igi-test-ca-2.pem \ No newline at end of file diff --git a/t/trust-anchors/7940b442.0 b/t/trust-anchors/7940b442.0 new file mode 120000 index 0000000000000000000000000000000000000000..4d8fbd9ffc99a32048f97f8f1b3b1ebcb580631c --- /dev/null +++ b/t/trust-anchors/7940b442.0 @@ -0,0 +1 @@ +igi-test-ca-2.pem \ No newline at end of file diff --git a/t/trust-anchors/d82942ab.0 b/t/trust-anchors/d82942ab.0 new file mode 120000 index 0000000000000000000000000000000000000000..b8991ae7113de419b1b4fda094099a3d53e4d0f6 --- /dev/null +++ b/t/trust-anchors/d82942ab.0 @@ -0,0 +1 @@ +igi-test-ca.pem \ No newline at end of file diff --git a/t/trust-anchors/igi-test-ca-2.pem b/t/trust-anchors/igi-test-ca-2.pem new file mode 100644 index 0000000000000000000000000000000000000000..d9b58c1dc2d78f67bfe2634fd3779cd3d4551b93 --- /dev/null +++ b/t/trust-anchors/igi-test-ca-2.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDhjCCAm6gAwIBAgIJAMCV/2NZUk0YMA0GCSqGSIb3DQEBBQUAMC8xCzAJBgNV +BAYTAklUMQwwCgYDVQQKDANJR0kxEjAQBgNVBAMMCVRlc3QgQ0EgMjAeFw0xNTAx +MjcxMzM5MjFaFw0yNTAxMjQxMzM5MjFaMC8xCzAJBgNVBAYTAklUMQwwCgYDVQQK +DANJR0kxEjAQBgNVBAMMCVRlc3QgQ0EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANgKnBTosmSk8MKmSaVNp2c1HJplrWAML/bx+X6wpvoC6RoxH+5G +2VIHHZjdgUyBcyuYDI2piwE2ByTrD5F/ToDsLpUReAmZeRY5fURwP5Gp0DMszdRq +uZR74I59BRSzuCpK7o4Oq01DubSisXrIfgpuOrFcAADl/Pe4L2M4dNrB5Ck/SaR+ +bRMN4CHBYAdlv3ncC3if31zwoMNMYoomhme0qmwWtRUzAlz8Hw5LM+Ngt43RiFWD +DqPD8QL6wxBtCxXUYaOPLt4pRsda5wsARWKGuutppzDPBbKVNTNMccnuUnk1UnzR +P4n6iRoPb8SR3P3uVx5dBdkI4xUpxEzNkn0CAwEAAaOBpDCBoTAdBgNVHQ4EFgQU +NwPLlkI6FI+9W3Iq7vBrqG1PjEQwXwYDVR0jBFgwVoAUNwPLlkI6FI+9W3Iq7vBr +qG1PjEShM6QxMC8xCzAJBgNVBAYTAklUMQwwCgYDVQQKDANJR0kxEjAQBgNVBAMM +CVRlc3QgQ0EgMoIJAMCV/2NZUk0YMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCFbvyDXdzRPtlFpq0ZSh5IMNWy3V1N +CwLa8vmEVwEBsgMQD4NTdefcJ/QkW3CvokhvfCt3Na83J1U9uSp98xiyWNi1esuM +MG1kplM30uNOOZd0UK97VxX5A/IRawBZJoVzgla6rygQTG4SUaguXm1ZaPlGRwhn +cJvbtusuiFa805O021g7+se8yu1E9457nMj5rLvPJ/b5UnwK0e2iRbbJje9VAp77 +/wcP2Ec/XfzDhfAksAsZAjg3+ngykvp4MDe56lExePOiIXDb7UMmnBSuQUpClsnB +2qYc7yWYRN279UUtMB81lXZdsc0FiwhMj6C141RrqP2girdwiJERoP7s +-----END CERTIFICATE----- diff --git a/t/trust-anchors/voms_example_2.cert.pem b/t/trust-anchors/voms_example_2.cert.pem new file mode 100644 index 0000000000000000000000000000000000000000..cfca8b81c43bd9fbc77fff4efae89f8ad538c818 --- /dev/null +++ b/t/trust-anchors/voms_example_2.cert.pem @@ -0,0 +1,85 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 2 (0x2) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=IT, O=IGI, CN=Test CA 2 + Validity + Not Before: Mar 14 16:18:34 2018 GMT + Not After : Mar 11 16:18:34 2028 GMT + Subject: C=IT, O=IGI, CN=voms.example + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ca:0f:d7:c6:91:cc:15:a1:97:32:0b:20:fd:94: + 11:57:46:59:3a:79:3e:ef:53:ab:9b:28:30:64:da: + bc:c5:0b:90:25:67:e5:46:06:2d:cf:dd:42:15:08: + f1:1e:ed:8b:e5:c9:cb:3d:cc:4a:77:92:63:af:ac: + 94:a7:e6:89:06:64:0c:bc:28:52:d1:50:48:02:54: + 5b:5b:6d:9e:0f:ee:89:f4:01:21:25:ea:ac:af:06: + a4:92:ce:32:2f:10:54:f6:37:02:7e:e0:e7:2a:fd: + 42:92:c8:ff:5c:f1:f2:83:62:9b:d9:7d:f6:08:cb: + 84:3e:03:26:a3:01:a2:ce:9c:de:d9:37:26:7e:6c: + 12:50:14:88:47:bc:68:91:6a:f6:d5:05:70:e6:fd: + 10:05:65:56:45:6f:95:22:d2:d4:55:77:cc:f5:fa: + 08:a4:36:2c:fa:b2:47:90:6c:c4:84:36:ac:24:f8: + d9:a8:99:66:e0:5e:96:34:1e:65:48:86:0f:10:7b: + e9:3d:1a:3f:ea:53:9f:70:30:0c:30:93:d3:f9:67: + d1:66:7c:a0:40:28:fe:6b:17:72:df:d5:5b:a7:0f: + 28:bc:92:d1:c8:31:a6:64:e0:d1:c0:1d:f6:dd:b8: + 03:b1:31:9d:d8:0d:54:56:df:69:35:f1:55:cc:84: + 52:d1 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Subject Key Identifier: + 5F:FE:E5:D5:AC:A3:6C:F4:19:A8:02:7D:F0:B8:9A:67:D0:A9:A1:1F + X509v3 Key Usage: critical + Digital Signature, Non Repudiation, Key Encipherment + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication, Microsoft Server Gated Crypto, Netscape Server Gated Crypto, E-mail Protection + X509v3 Authority Key Identifier: + keyid:37:03:CB:96:42:3A:14:8F:BD:5B:72:2A:EE:F0:6B:A8:6D:4F:8C:44 + + X509v3 Subject Alternative Name: + DNS:voms.example + Signature Algorithm: sha1WithRSAEncryption + d2:75:21:54:90:c6:88:15:25:79:48:6d:d1:ba:5a:c7:58:a4: + b0:35:5e:30:1a:cf:ba:3f:36:fc:1e:9c:91:ab:54:ca:a8:3e: + 2a:3c:75:44:55:2a:27:de:e7:0f:d8:c8:37:91:b1:65:2a:bf: + 81:37:5a:0f:b4:31:d6:2c:7d:e0:ff:e1:36:c4:cf:d7:b3:a3: + 20:be:7d:bb:26:ae:f6:55:df:68:46:83:4c:90:83:ee:6e:5d: + 16:4c:ab:94:02:61:18:bb:48:e0:78:c3:ce:8e:87:30:cd:82: + 19:8a:6a:d9:90:a4:db:00:fc:ee:fd:b1:c8:f1:0f:08:c6:47: + 78:da:7e:2f:33:f1:8f:16:80:f0:97:a1:72:f9:5a:6e:30:12: + 28:2a:c3:ca:cd:b3:c7:f1:ab:e1:db:b8:16:01:54:b7:5f:9e: + df:5e:56:25:6e:d4:72:78:a4:5d:c5:ea:92:c0:6b:a6:aa:bd: + 06:73:6f:5f:57:29:38:db:13:f1:7d:51:60:af:21:fe:79:fa: + a5:8c:cc:12:34:76:32:92:24:9e:9e:6d:51:56:2d:05:28:09: + 9b:ca:d7:8e:f3:22:ea:a5:80:82:6b:83:5e:2a:35:53:67:bc: + 05:5b:ac:0e:24:48:1a:ef:98:96:e5:8a:7f:28:64:1e:ae:ec: + 11:18:66:45 +-----BEGIN CERTIFICATE----- +MIIDlzCCAn+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADAvMQswCQYDVQQGEwJJVDEM +MAoGA1UECgwDSUdJMRIwEAYDVQQDDAlUZXN0IENBIDIwHhcNMTgwMzE0MTYxODM0 +WhcNMjgwMzExMTYxODM0WjAyMQswCQYDVQQGEwJJVDEMMAoGA1UECgwDSUdJMRUw +EwYDVQQDDAx2b21zLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDKD9fGkcwVoZcyCyD9lBFXRlk6eT7vU6ubKDBk2rzFC5AlZ+VGBi3P3UIV +CPEe7Yvlycs9zEp3kmOvrJSn5okGZAy8KFLRUEgCVFtbbZ4P7on0ASEl6qyvBqSS +zjIvEFT2NwJ+4Ocq/UKSyP9c8fKDYpvZffYIy4Q+AyajAaLOnN7ZNyZ+bBJQFIhH +vGiRavbVBXDm/RAFZVZFb5Ui0tRVd8z1+gikNiz6skeQbMSENqwk+NmomWbgXpY0 +HmVIhg8Qe+k9Gj/qU59wMAwwk9P5Z9FmfKBAKP5rF3Lf1VunDyi8ktHIMaZk4NHA +HfbduAOxMZ3YDVRW32k18VXMhFLRAgMBAAGjgbowgbcwDAYDVR0TAQH/BAIwADAd +BgNVHQ4EFgQUX/7l1ayjbPQZqAJ98LiaZ9CpoR8wDgYDVR0PAQH/BAQDAgXgMD4G +A1UdJQQ3MDUGCCsGAQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAwYJYIZIAYb4 +QgQBBggrBgEFBQcDBDAfBgNVHSMEGDAWgBQ3A8uWQjoUj71bciru8GuobU+MRDAX +BgNVHREEEDAOggx2b21zLmV4YW1wbGUwDQYJKoZIhvcNAQEFBQADggEBANJ1IVSQ +xogVJXlIbdG6WsdYpLA1XjAaz7o/NvwenJGrVMqoPio8dURVKife5w/YyDeRsWUq +v4E3Wg+0MdYsfeD/4TbEz9ezoyC+fbsmrvZV32hGg0yQg+5uXRZMq5QCYRi7SOB4 +w86OhzDNghmKatmQpNsA/O79scjxDwjGR3jafi8z8Y8WgPCXoXL5Wm4wEigqw8rN +s8fxq+HbuBYBVLdfnt9eViVu1HJ4pF3F6pLAa6aqvQZzb19XKTjbE/F9UWCvIf55 ++qWMzBI0djKSJJ6ebVFWLQUoCZvK147zIuqlgIJrg14qNVNnvAVbrA4kSBrvmJbl +in8oZB6u7BEYZkU= +-----END CERTIFICATE----- diff --git a/t/trust-anchors/voms_example_2.key.pem b/t/trust-anchors/voms_example_2.key.pem new file mode 100644 index 0000000000000000000000000000000000000000..9496d59d8bcd54cb8bbb5ebc75109080f19490d9 --- /dev/null +++ b/t/trust-anchors/voms_example_2.key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAyg/XxpHMFaGXMgsg/ZQRV0ZZOnk+71OrmygwZNq8xQuQJWfl +RgYtz91CFQjxHu2L5cnLPcxKd5Jjr6yUp+aJBmQMvChS0VBIAlRbW22eD+6J9AEh +Jeqsrwakks4yLxBU9jcCfuDnKv1Cksj/XPHyg2Kb2X32CMuEPgMmowGizpze2Tcm +fmwSUBSIR7xokWr21QVw5v0QBWVWRW+VItLUVXfM9foIpDYs+rJHkGzEhDasJPjZ +qJlm4F6WNB5lSIYPEHvpPRo/6lOfcDAMMJPT+WfRZnygQCj+axdy39Vbpw8ovJLR +yDGmZODRwB323bgDsTGd2A1UVt9pNfFVzIRS0QIDAQABAoIBAC16D1hTrBkaO0s6 +EfzAfH6mCKMOcsmujSroiqvIR0AZ8CFbFtEBxwHHjH3re0k4sYnQNvv7pK7wtZru +Pq7jRee4UN1wPeN6LBrKHZ2gODjhuQ6/ylQcUy05U4Tu/4B0LosTqm4f9CdKxNcA +gejLU4eag/UZUmx8UZEbaHC7h4b0hQxu0EKEYZGo34azLRBaBqREtm2FpVk9ycJk ++Ij4a+qUfwCDJl8Z61hh4BNT7tWJVy5R61qxlD5Y9+thG7p2pgLCAyXVskgYfwCV +/AYOblWM9mEKpfnhEkhG0e2AO9/jOSsVaXWbiKC4tq59Lh3s6P5c0vlM4lMG4ZRS +axWVRBkCgYEA6xU9AaW5sd8gtOk1zpKVga5PdcewkCMj4eABZvuXW4B2wJr3KDIi +TYAZFqz6t7yy7VxhR75lXECbmyFB1uoHxt9yl+yY6R0IQEKsLA9xvEw2Xzqr7gch +Tfv+sQsIoW+nl5Z4TTrNMRoBwvzTZNkBSUQXRhOOfWhQUKJ/ZrDvS6MCgYEA3Apx +0YPQrb5r8V4hu6OyPhfUp3ZsoKvOyLVKKv7Yhx2u/yXCtsCXP+c5sNDFN3vxoWxX +8uOgZUrwhKF5ieYSQB0uSZONzHGtItRtaAaSGdQ4s7UDbWFHEfxR9XE1ZP8m/A5Z +wN0knnTQjve1ZyovTSGSs0zzRQoZaYmw6WFYzvsCgYEA1S46V48Y+WNVPpmpsL2f +FK2k4zMGO3+SX5gKzX/j/xddGUauUWY9UziSB80vw4U8YSGAGlZfhqwUMDaVhTZP +fRpOydTFycgJHnUXuxD6W/5k5DDJjx4qJpUZnyVZW0Rsn3vVdnuXbiqeZFtvvClK +EE3OKT883R7Gjoj9rXtQVa8CgYEAkLtiACCGyzFcSMfUwlo67HK6UmgnrUs02Xm9 +TiiQfdc9et/4gkKNed/6Z136yrMAzV+5Pa8Rmm6/Y03e5qBpUrie8JBYjagb7LPz +PqBLyyd3IGUo2vJIUAE6W4naSBM4LkS2LpCG/J7za4ZtUG1D7aTunHc58ChjbLK/ +pdJ9Gq8CgYEAmQHYXsVzjhxLDdYJGj4Dg2abaSL4y0e+76zP/AVfeNHfAoztm2w2 +WJm5Xdf1NFEP+aopuGl9D4ikGvZ5bHscAgj/L3rbrOCz1XAmIwAcpcPE782vV1Pe +AEM7dszw7BXxvh5Fld1SJcC+/bUW7JTRzPRJmfz/jF/AF4SKkE9yk6Q= +-----END RSA PRIVATE KEY----- diff --git a/t/untrusted_ac.t b/t/untrusted_ac.t new file mode 100644 index 0000000000000000000000000000000000000000..dd93118364daec6290c2e7a1829207aca3f7c949 --- /dev/null +++ b/t/untrusted_ac.t @@ -0,0 +1,37 @@ + +use Test::Nginx::Socket 'no_plan'; + +run_tests(); + +__DATA__ + +=== TEST 1: https with x509 client authentication, untrusted AC signature +--- main_config + env OPENSSL_ALLOW_PROXY_CERTS=1; + env X509_VOMS_DIR=t/vomsdir; + env X509_CERT_DIR=t/trust-anchors; +--- http_config + server { + error_log logs/error.log debug; + listen 8443 ssl; + ssl_certificate ../../certs/nginx_voms_example.cert.pem; + ssl_certificate_key ../../certs/nginx_voms_example.key.pem; + ssl_client_certificate ../../trust-anchors/igi-test-ca.pem; + ssl_verify_depth 10; + ssl_verify_client on; + location = / { + default_type text/plain; + echo $voms_user; + } + } +--- config + location = / { + proxy_pass https://localhost:8443/; + proxy_ssl_certificate ../../certs/5.cert.pem; + proxy_ssl_certificate_key ../../certs/5.key.pem; + } +--- request +GET / +--- error_log +Cannot verify AC signature +--- error_code: 200 diff --git a/t/valid_ac.t b/t/valid_ac.t new file mode 100644 index 0000000000000000000000000000000000000000..f84fb9707bcb2ac6a1930d08d0de79eadc65d309 --- /dev/null +++ b/t/valid_ac.t @@ -0,0 +1,58 @@ + +use Test::Nginx::Socket 'no_plan'; + +run_tests(); + +__DATA__ + +=== TEST 1: valid AC, verification of valid VOMS attributes extracted by ngx_http_voms_module +--- main_config + env OPENSSL_ALLOW_PROXY_CERTS=1; + env X509_VOMS_DIR=t/vomsdir; + env X509_CERT_DIR=t/trust-anchors; +--- http_config + server { + error_log logs/error.log debug; + listen 8443 ssl; + ssl_certificate ../../certs/nginx_voms_example.cert.pem; + ssl_certificate_key ../../certs/nginx_voms_example.key.pem; + ssl_client_certificate ../../trust-anchors/igi-test-ca.pem; + ssl_verify_depth 10; + ssl_verify_client on; + location = / { + default_type text/plain; + echo $voms_user; + echo $voms_user_ca; + echo $voms_fqans; + echo $voms_server; + echo $voms_server_ca; + echo $voms_vo; + echo $voms_server_uri; + echo $voms_not_before; + echo $voms_not_after; + echo $voms_generic_attributes; + echo $voms_serial; + } + } +--- config + location = / { + proxy_pass https://localhost:8443/; + proxy_ssl_certificate ../../certs/3.cert.pem; + proxy_ssl_certificate_key ../../certs/3.key.pem; + } +--- request +GET / +--- response_body +/C=IT/O=IGI/CN=test0 +/C=IT/O=IGI/CN=Test CA +/test/exp1,/test/exp2,/test/exp3/Role=PIPPO +/C=IT/O=IGI/CN=voms.example +/C=IT/O=IGI/CN=Test CA +test.vo +voms.example:15000 +20180101000000Z +20300101000000Z +n=nickname v=newland q=test.vo,n=nickname v=giaco q=test.vo +7B +--- error_code: 200 +