diff --git a/contrib/certs/main.sh b/contrib/certs/main.sh index c8d461b5..b7f5e231 100755 --- a/contrib/certs/main.sh +++ b/contrib/certs/main.sh @@ -68,6 +68,7 @@ openssl ca \ -passin 'pass:masterword' \ -config ca.conf + rm client-of-rca-csr.pem # Setup ICA directory structure @@ -101,7 +102,8 @@ openssl ca \ -extensions v3_intermediate_ca \ -out ica-signed-cert.pem \ -passin 'pass:masterword' \ - -config ca.conf + -config ca.conf \ + -outform PEM rm ica-csr.pem @@ -136,12 +138,15 @@ openssl ca \ -section ICA_default \ -out client-of-ica-signed-cert.pem \ -passin 'pass:icaword' \ - -config ca.conf + -config ca.conf \ + -outform PEM rm client-of-ica-csr.pem +cat rca-signed-cert.pem ica-signed-cert.pem client-of-ica-signed-cert.pem > client-of-ica-chain.pem - +# Check result +openssl verify -verbose -CAfile rca-signed-cert.pem client-of-ica-chain.pem # create 2nd ICA client private key openssl genpkey \ @@ -167,6 +172,12 @@ openssl ca \ -section ICA_default \ -out client2-of-ica-signed-cert.pem \ -passin 'pass:icaword' \ - -config ca.conf + -config ca.conf \ + -outform PEM rm client2-of-ica-csr.pem + +cat rca-signed-cert.pem ica-signed-cert.pem client2-of-ica-signed-cert.pem > client2-of-ica-chain.pem + +# Check result +openssl verify -verbose -CAfile rca-signed-cert.pem client2-of-ica-chain.pem diff --git a/src/tests/client_server/Makefile.am b/src/tests/client_server/Makefile.am index 938b2033..bcf9cc81 100644 --- a/src/tests/client_server/Makefile.am +++ b/src/tests/client_server/Makefile.am @@ -30,7 +30,8 @@ check_PROGRAMS = \ if MHD_ENABLE_HTTPS check_PROGRAMS += \ - test_tls + test_tls \ + test_cert_tls endif TESTS = $(check_PROGRAMS) @@ -59,8 +60,28 @@ test_tls_SOURCES = \ test_tls_LDADD = \ libmhdt.la +test_cert_tls_SOURCES = \ + test_cert_tls.c +test_cert_tls_LDADD = \ + libmhdt.la test_postprocessor_SOURCES = \ test_postprocessor.c test_postprocessor_LDADD = \ libmhdt.la + +EXTRA_DIST = \ + data/client2-of-ica-chain.pem \ + data/client2-of-ica-private-key.pem \ + data/client2-of-ica-signed-cert.pem \ + data/client-of-ica-chain.pem \ + data/client-of-ica-private-key.pem \ + data/client-of-ica-signed-cert.pem \ + data/client-of-rca-private-key.pem \ + data/client-of-rca-signed-cert.pem \ + data/ica-chain.pem \ + data/ica-private-key.pem \ + data/ica-signed-cert.pem \ + data/rca-private-key.pem \ + data/rca-signed-cert.pem \ + data/rca-unsigned-cert.pem diff --git a/src/tests/client_server/data/client-of-ica-chain.pem b/src/tests/client_server/data/client-of-ica-chain.pem new file mode 100644 index 00000000..08bee56a --- /dev/null +++ b/src/tests/client_server/data/client-of-ica-chain.pem @@ -0,0 +1,177 @@ +-----BEGIN CERTIFICATE----- +MIIDjTCCAnWgAwIBAgIUKkxAx2lVnvYcaNqBpJmTgXh1/VgwDQYJKoZIhvcNAQEL +BQAwVjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNV +BAcMBkJvc3RvbjENMAsGA1UECgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0 +MTEyOTEyNDUyOFoXDTM0MTEyNzEyNDUyOFowVjELMAkGA1UEBhMCVVMxFjAUBgNV +BAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UECgwEUm9v +dDEPMA0GA1UEAwwGY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA23YSrcGIBgZf9bbzTnmYFy+4tM82kUhsVFKxWCNEMdKmhaeVvXogyd6Evq4P +NvBGdUABDtHp4pSEijrxWbn8sxddTznoT/8IOuHI0/PtwXYP/sHQ/HzekEUVKN2Z +NMbMUzQfaJyiIV5TrZlaBwHjQ+sRs8E56C3cQjkwuyjll2zDsEfmEnPimZRAL3kb +wW8VFfBcR2Id+a9xKjwlnB4eXQFAgYINoRgCtUOUxSeFgNnwkOUSqDknO6Xi47YZ +EdLlHyUnv5eX547xUkrYhfQuQwaqpGrjHf3GFoysN8P9kd2f1qsJKtQcUbF9DDeZ +6ya47X/LBO8QflMsVjb1V3oz9QIDAQABo1MwUTAdBgNVHQ4EFgQUsvdZoX3RxdN6 +wrONr31SOA9Qbc4wHwYDVR0jBBgwFoAUsvdZoX3RxdN6wrONr31SOA9Qbc4wDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAS3PyV7crGk9brqU90aML +2TWkjgzFb3/nASnpvVYiqyiV4neGiEjtDy7eVlqP6GlD2pYcVodY+ly9wNlo85/h +YfgCFFl37tMG7PpRac2qBqaSn1DpwsCb08LjRrOvoaRffWUikSoZmsYDlaCgl9nT +pGtIrz0BSoyu5mHalIZTVQOrbkNBNK6ZgnYy2iWuiLa5Z1xzKpsRBRaKJc1pcQE/ +QVbPdCiyGQMPEVn/KHxitlycFoee/fA+izXVdstVwfig2DoMvrlGZvEkN1ER3Yz4 +QPJ6HzOsBQL1F+YhnMCQfc2rpcwxAWf8JMy6jsCq42KGq53tkWqHyQ6Zu2SiLRYk +CA== +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, L=Boston, O=Root, CN=ca.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:d5:1f:d7:1a:46:9a:70:ed:6a:88:af:be:80:04: + 42:32:26:cf:c4:d8:11:05:21:3f:b3:ef:29:d9:a3: + 39:37:b7:89:d5:64:9a:cc:c1:f4:9c:0a:8b:41:cb: + 09:7e:ab:16:62:24:6b:69:ea:ba:78:a2:97:a3:e4: + 0a:06:c2:2e:14:31:20:15:61:74:7d:70:5d:e8:9f: + 33:63:4b:08:81:8b:8f:5a:19:af:92:99:c6:c5:a2: + a4:16:f9:1c:fd:bb:03:f4:2a:1e:98:f2:b2:c1:20: + 69:0e:96:ea:3e:dc:b5:91:40:1f:aa:51:a6:a4:09: + 06:2f:d9:be:b0:e3:4e:d4:27:2c:b3:74:b2:90:08: + 09:d6:cb:7a:4f:f0:dd:43:99:ef:22:24:94:04:c0: + 70:48:ba:d8:c4:4f:64:89:bf:7a:a3:74:27:d6:1f: + a7:ab:04:20:e6:99:c8:8f:2f:14:99:02:d1:eb:ce: + 2b:0f:ba:5e:b4:80:22:7b:ef:3c:0a:90:a4:97:7b: + 4c:19:5f:d4:5e:d7:21:32:3f:3e:05:8a:67:01:d9: + 39:f5:7e:39:a7:cf:64:c1:4a:d7:b5:c2:f4:a2:c0: + a4:ef:9f:25:96:96:95:bb:bc:44:27:7f:eb:dd:43: + b4:28:4a:70:f6:21:83:0f:59:cb:98:69:57:8f:ca: + a8:93 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + X509v3 Authority Key Identifier: + 1A:03:C0:AD:5C:3D:FE:76:38:FC:20:8C:B2:73:5C:A3:44:1D:0F:EC + X509v3 Basic Constraints: critical + CA:TRUE, pathlen:0 + X509v3 Key Usage: critical + Digital Signature, Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 00:f7:92:a1:7e:cb:38:f6:62:28:fc:86:ea:7d:64:2a:0e:3d: + 95:e9:86:d1:00:29:42:5f:97:27:60:31:33:6b:b1:40:9e:d0: + 20:fd:c9:a1:19:21:41:91:6d:d0:97:af:0a:9f:e9:55:b8:fe: + 66:20:c6:42:31:9b:8e:08:8e:ea:cb:86:17:e9:12:49:43:de: + 03:74:a2:19:77:7e:4f:ef:f6:3c:7e:d3:ed:47:fd:24:9b:d5: + cc:29:4a:cf:30:d9:40:bc:73:d9:d6:5f:f1:75:48:f8:00:06: + 2c:a3:84:f0:9d:0c:51:14:40:d0:9d:4b:7c:79:20:93:b9:2f: + 29:f6:39:ae:36:4f:08:45:65:43:f7:4e:5d:88:84:da:fd:46: + a3:14:2e:cb:b9:fa:80:b4:a6:bf:db:72:91:0d:05:a5:82:f6: + f9:6c:81:8b:2b:d9:13:5c:cd:d5:da:4b:31:5e:f0:4d:9a:a7: + 2e:cb:73:6e:7e:07:7c:4a:cc:9a:12:f0:cb:86:34:50:73:c6: + 2c:40:23:73:ed:7f:f5:c9:61:8e:85:8b:37:fc:33:20:af:fd: + 6d:4a:cc:3f:60:22:7b:ef:c4:9c:51:d6:f3:de:7c:06:40:a8: + 4f:ea:38:07:b5:df:4f:b0:56:22:af:50:3d:6b:eb:46:42:7b: + a1:3b:1b:df +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UE +CgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0MTEyNzIwNTExOVoXDTI1MTEy +NzIwNTExOVowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMx +DDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwHaWNhLmdudTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANUf1xpGmnDtaoivvoAEQjImz8TYEQUhP7PvKdmjOTe3 +idVkmszB9JwKi0HLCX6rFmIka2nquniil6PkCgbCLhQxIBVhdH1wXeifM2NLCIGL +j1oZr5KZxsWipBb5HP27A/QqHpjyssEgaQ6W6j7ctZFAH6pRpqQJBi/ZvrDjTtQn +LLN0spAICdbLek/w3UOZ7yIklATAcEi62MRPZIm/eqN0J9Yfp6sEIOaZyI8vFJkC +0evOKw+6XrSAInvvPAqQpJd7TBlf1F7XITI/PgWKZwHZOfV+OafPZMFK17XC9KLA +pO+fJZaWlbu8RCd/691DtChKcPYhgw9Zy5hpV4/KqJMCAwEAAaNmMGQwHQYDVR0O +BBYEFBT62nf4RZK3fDj8dMomdCu31DZ1MB8GA1UdIwQYMBaAFBoDwK1cPf52OPwg +jLJzXKNEHQ/sMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMA0G +CSqGSIb3DQEBCwUAA4IBAQAA95Khfss49mIo/IbqfWQqDj2V6YbRAClCX5cnYDEz +a7FAntAg/cmhGSFBkW3Ql68Kn+lVuP5mIMZCMZuOCI7qy4YX6RJJQ94DdKIZd35P +7/Y8ftPtR/0km9XMKUrPMNlAvHPZ1l/xdUj4AAYso4TwnQxRFEDQnUt8eSCTuS8p +9jmuNk8IRWVD905diITa/UajFC7LufqAtKa/23KRDQWlgvb5bIGLK9kTXM3V2ksx +XvBNmqcuy3Nufgd8SsyaEvDLhjRQc8YsQCNz7X/1yWGOhYs3/DMgr/1tSsw/YCJ7 +78ScUdbz3nwGQKhP6jgHtd9PsFYir1A9a+tGQnuhOxvf +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA-Client, CN=client.ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c6:7e:66:d3:87:a7:86:39:a4:62:81:c8:55:b0: + 7e:80:5a:a8:cc:c1:4e:81:c1:99:34:b3:26:6b:73: + 8b:88:b3:0e:5b:40:1d:12:3b:49:08:d0:2f:47:00: + 2d:5d:71:c4:34:af:d3:c4:cc:8d:25:d7:54:8d:47: + 99:20:ce:90:54:d7:e8:63:92:fe:01:01:32:f1:20: + b5:00:13:c9:76:8f:6d:3f:98:d2:6c:f9:a9:02:f3: + 2a:b9:0d:d2:71:ee:fc:30:f7:7b:c8:2c:36:e5:96: + 9b:ca:3f:b2:3e:16:2a:9b:53:c1:05:3a:2e:19:54: + 21:31:c0:82:a8:95:07:fd:a7:6c:bb:97:83:4a:27: + 75:da:04:2c:89:2a:13:a6:a0:b4:be:bc:c3:40:24: + 88:59:29:d8:94:74:ee:de:c8:72:92:5d:76:b2:c7: + 8f:43:b4:37:2a:75:60:c1:d3:aa:75:b2:e7:f4:ab: + 42:19:8f:26:f4:ca:75:d4:fe:ab:00:6b:ff:4c:97: + ea:4a:ca:74:5e:a5:bc:4a:d9:7e:55:ce:51:5e:c1: + f2:8e:5f:6f:38:bf:ed:e1:6d:71:a5:98:5e:9e:93: + 22:70:14:ac:ed:90:49:be:db:e3:c6:5a:fe:7e:4b: + 69:d3:79:37:53:b0:2a:10:48:b7:b5:ea:02:4a:81: + ff:6b + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + A0:8F:2B:91:B7:06:F8:CB:F0:2A:A3:A5:FC:77:A7:ED:46:63:FB:29 + X509v3 Authority Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 9a:b4:2b:13:bf:b1:39:0f:70:bc:c1:ed:df:7e:28:91:01:11: + 07:a1:93:eb:08:58:4a:59:b6:73:80:33:f6:19:05:65:b5:ad: + 38:f2:f8:17:34:f1:06:89:5f:a1:0a:dd:c5:32:cc:f9:36:52: + 59:e8:33:7b:e4:e2:47:93:88:4d:f0:e0:b9:ff:d2:9e:35:ee: + 11:60:60:43:76:f9:41:1c:8a:96:7c:40:37:e7:b6:5f:f6:d1: + de:24:6e:d5:21:77:ae:8c:4a:ca:ca:5a:72:4c:8d:cf:b6:7e: + 4d:46:00:da:b7:07:ad:7f:b1:41:90:27:32:da:86:de:19:b9: + 33:1b:98:82:b4:a4:16:de:50:24:64:e9:62:96:25:c9:55:78: + 9e:58:97:8c:08:6b:5b:49:7d:e5:e2:0a:8e:4e:02:78:64:12: + c9:31:2d:80:24:53:c0:b8:c6:8f:c8:bc:76:92:61:c2:9a:1c: + ed:ed:21:dd:d3:9a:3b:af:ba:b4:77:66:45:97:f1:02:ae:67: + 7c:65:d7:c8:d8:58:38:c2:ef:59:07:1b:f5:20:c7:ea:5a:38: + 63:de:f9:8c:fc:b3:9f:e4:40:89:19:fd:21:bc:e6:e1:08:fb: + 33:a4:f9:69:d8:a4:58:f9:ad:5f:fa:d3:4a:8d:e8:98:45:56: + c3:cf:35:f8 +-----BEGIN CERTIFICATE----- +MIIDVjCCAj6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwH +aWNhLmdudTAeFw0yNDExMjcyMDUxMTlaFw0yNTExMjcyMDUxMTlaMFMxCzAJBgNV +BAYTAlVTMRYwFAYDVQQIDA1NYXNzYWNodXNldHRzMRMwEQYDVQQKDApJQ0EtQ2xp +ZW50MRcwFQYDVQQDDA5jbGllbnQuaWNhLmdudTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMZ+ZtOHp4Y5pGKByFWwfoBaqMzBToHBmTSzJmtzi4izDltA +HRI7SQjQL0cALV1xxDSv08TMjSXXVI1HmSDOkFTX6GOS/gEBMvEgtQATyXaPbT+Y +0mz5qQLzKrkN0nHu/DD3e8gsNuWWm8o/sj4WKptTwQU6LhlUITHAgqiVB/2nbLuX +g0onddoELIkqE6agtL68w0AkiFkp2JR07t7IcpJddrLHj0O0Nyp1YMHTqnWy5/Sr +QhmPJvTKddT+qwBr/0yX6krKdF6lvErZflXOUV7B8o5fbzi/7eFtcaWYXp6TInAU +rO2QSb7b48Za/n5LadN5N1OwKhBIt7XqAkqB/2sCAwEAAaNCMEAwHQYDVR0OBBYE +FKCPK5G3BvjL8Cqjpfx3p+1GY/spMB8GA1UdIwQYMBaAFBT62nf4RZK3fDj8dMom +dCu31DZ1MA0GCSqGSIb3DQEBCwUAA4IBAQCatCsTv7E5D3C8we3ffiiRAREHoZPr +CFhKWbZzgDP2GQVlta048vgXNPEGiV+hCt3FMsz5NlJZ6DN75OJHk4hN8OC5/9Ke +Ne4RYGBDdvlBHIqWfEA357Zf9tHeJG7VIXeujErKylpyTI3Ptn5NRgDatwetf7FB +kCcy2obeGbkzG5iCtKQW3lAkZOliliXJVXieWJeMCGtbSX3l4gqOTgJ4ZBLJMS2A +JFPAuMaPyLx2kmHCmhzt7SHd05o7r7q0d2ZFl/ECrmd8ZdfI2Fg4wu9ZBxv1IMfq +Wjhj3vmM/LOf5ECJGf0hvObhCPszpPlp2KRY+a1f+tNKjeiYRVbDzzX4 +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/client-of-ica-private-key.pem b/src/tests/client_server/data/client-of-ica-private-key.pem new file mode 100644 index 00000000..bac810f8 --- /dev/null +++ b/src/tests/client_server/data/client-of-ica-private-key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQQbu9pCdBFD4BDSuo1 +boPjnwICCAAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEEz85m3KfzHpo1UA +DojW/PIEggTQdO0kdvMZyDcpJBYImhaFNv/aptKjqHVjPHoVdCxq96F2IKCkdGhE +IdLxjre1fb33wAlK2hgyg0GXexlfdp7044aZytzD+gwWgNilZn4dBL88En2DI9WR +nbaz8AGlVy7lSudDnB93WRErXIcR6jKs+3XQ+GQkKchEfZloo+MBXM3QT1dhhNbH +x+lxxzCSfKHS6OFvJQRfxvSOf4yeFgK2knzThb/OfXRJyKvQfGlz9PtMUkOatyJU +sZNc0lwo4gLYW2OvccrNUNYuKqEuOtHIBQe0+iFHwvqxb4J0jROT6LOzhqZaEsjy +BAKphT30WwCnwXC56nBU/oUfcr4eaj0XnvenThvp8Qn1cK7K3BaE5flPR9VKhdjD ++nbVdlSURLFCnAJsTAPp7cKmgwqH62k/MgqX1ZMLnMpLbpATVgrHakjN6tKONdWf +sGJMmVlU7XsOh/tMjZSxs1SUdQU0h1rbtyPSlGiBygd8+c09xNzApmwHWjGQGEgf +mkOa8BLz9bObTWPaSDLXK52FFjErwaxdXnOT9v4YOZVzEr3fRImOlj0Z4apsfmTv +krcKZLOl1NMxAiLnY6Cm8lHiMnrwgHvQ4ZGKH4N7n/pTO8Ol47rrkIxXxDDTZRAP +B27dfzmYHaQuDjEedm7HexuwaBDIbRyFP+k4VVXuWG0nyRW+t/hQESUIFBwjiVXR +4MKO42+XuoAB740wDDIMFHlBJ91AZnKuAFcA1JWPx/eOGx7kFB0GYlfzDuCVBbXz +Z/5iphHTQrq0c0HP/iQ+RiUE+tXHTR8vbt8NnzwK3CV0DKT1zDBXf5DGDTLpWb8D +soBjDwGECNED3fdpgfwaQZfQQtFpNQh7U7prTykGXKcfLCH1iGbhHLUgZu/L7shk +ZWjRuMOXbjSS67jlYJiCkzCFaJmicMi9LTOHaQaXCr40ddtY4EXcRWkk5p36YIQp +4HMoKTxoVaHJhQmHL8LY4YGrkdyrx1rBkr1kgATFJGAEiB+/Joq8T1czt0JmsuAW +kTGKHKt2Di2fAhDdoozTU/1YCsjNLzNvLZwUtv03ToD5i7qLH7OfYJ5UeAMKBCW2 +EdE7mJoPzRz+mLWBnvs+rlVqRbXbizHvRnPahWkTYvHe4jmYNUMLGg5ZI0iCxwrE +9c4Kly7nFMrKhRndipcL80jDKdUjO2QqS1oglyIlcfSLgl7Vi0WavstpQbaDUUuI +WZVmJMBhLWpNVEJa8WVO2g5mKNge/d8sh/pzP4pGRUzjABZVGFb+DvL5Vf1nnOoO +CLPzl/orbgZU3zC0x4mfogZNSSmUQiL2TFBnd5OlSx8xAgtUrudDeR0hZ0D91W4R +U5joiWUZvzFhr3LvO/oR2uewWpWKQo0/7YsGPI091KPRjcnqSPsOAFU0jOWkOHJp +16MyxppSh51BJa7cAWfMQXAQhEuxDZXdZR5iftJpF7JqPp02ekQUsBcHHXmeuRU5 +Xzf30DcJAN8L8OucBT1OXH51cDpI+O+JCgfQUvwd25vswrWmLJVcDCvFn3jW6GHf +1CQflR4ChNnzoESxJ2qMGSkSNp6RMjKnFwGrKkIb7NG3txYMNjp3vg26n9Byd7+V +fG/KqpYcHs3QxMVGfCB05uqyUn95ZD3OlCF5LY1pluTGCkrpbgmnEjg= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/src/tests/client_server/data/client-of-ica-signed-cert.pem b/src/tests/client_server/data/client-of-ica-signed-cert.pem new file mode 100644 index 00000000..7fd8c30b --- /dev/null +++ b/src/tests/client_server/data/client-of-ica-signed-cert.pem @@ -0,0 +1,75 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA-Client, CN=client.ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c6:7e:66:d3:87:a7:86:39:a4:62:81:c8:55:b0: + 7e:80:5a:a8:cc:c1:4e:81:c1:99:34:b3:26:6b:73: + 8b:88:b3:0e:5b:40:1d:12:3b:49:08:d0:2f:47:00: + 2d:5d:71:c4:34:af:d3:c4:cc:8d:25:d7:54:8d:47: + 99:20:ce:90:54:d7:e8:63:92:fe:01:01:32:f1:20: + b5:00:13:c9:76:8f:6d:3f:98:d2:6c:f9:a9:02:f3: + 2a:b9:0d:d2:71:ee:fc:30:f7:7b:c8:2c:36:e5:96: + 9b:ca:3f:b2:3e:16:2a:9b:53:c1:05:3a:2e:19:54: + 21:31:c0:82:a8:95:07:fd:a7:6c:bb:97:83:4a:27: + 75:da:04:2c:89:2a:13:a6:a0:b4:be:bc:c3:40:24: + 88:59:29:d8:94:74:ee:de:c8:72:92:5d:76:b2:c7: + 8f:43:b4:37:2a:75:60:c1:d3:aa:75:b2:e7:f4:ab: + 42:19:8f:26:f4:ca:75:d4:fe:ab:00:6b:ff:4c:97: + ea:4a:ca:74:5e:a5:bc:4a:d9:7e:55:ce:51:5e:c1: + f2:8e:5f:6f:38:bf:ed:e1:6d:71:a5:98:5e:9e:93: + 22:70:14:ac:ed:90:49:be:db:e3:c6:5a:fe:7e:4b: + 69:d3:79:37:53:b0:2a:10:48:b7:b5:ea:02:4a:81: + ff:6b + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + A0:8F:2B:91:B7:06:F8:CB:F0:2A:A3:A5:FC:77:A7:ED:46:63:FB:29 + X509v3 Authority Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 9a:b4:2b:13:bf:b1:39:0f:70:bc:c1:ed:df:7e:28:91:01:11: + 07:a1:93:eb:08:58:4a:59:b6:73:80:33:f6:19:05:65:b5:ad: + 38:f2:f8:17:34:f1:06:89:5f:a1:0a:dd:c5:32:cc:f9:36:52: + 59:e8:33:7b:e4:e2:47:93:88:4d:f0:e0:b9:ff:d2:9e:35:ee: + 11:60:60:43:76:f9:41:1c:8a:96:7c:40:37:e7:b6:5f:f6:d1: + de:24:6e:d5:21:77:ae:8c:4a:ca:ca:5a:72:4c:8d:cf:b6:7e: + 4d:46:00:da:b7:07:ad:7f:b1:41:90:27:32:da:86:de:19:b9: + 33:1b:98:82:b4:a4:16:de:50:24:64:e9:62:96:25:c9:55:78: + 9e:58:97:8c:08:6b:5b:49:7d:e5:e2:0a:8e:4e:02:78:64:12: + c9:31:2d:80:24:53:c0:b8:c6:8f:c8:bc:76:92:61:c2:9a:1c: + ed:ed:21:dd:d3:9a:3b:af:ba:b4:77:66:45:97:f1:02:ae:67: + 7c:65:d7:c8:d8:58:38:c2:ef:59:07:1b:f5:20:c7:ea:5a:38: + 63:de:f9:8c:fc:b3:9f:e4:40:89:19:fd:21:bc:e6:e1:08:fb: + 33:a4:f9:69:d8:a4:58:f9:ad:5f:fa:d3:4a:8d:e8:98:45:56: + c3:cf:35:f8 +-----BEGIN CERTIFICATE----- +MIIDVjCCAj6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwH +aWNhLmdudTAeFw0yNDExMjcyMDUxMTlaFw0yNTExMjcyMDUxMTlaMFMxCzAJBgNV +BAYTAlVTMRYwFAYDVQQIDA1NYXNzYWNodXNldHRzMRMwEQYDVQQKDApJQ0EtQ2xp +ZW50MRcwFQYDVQQDDA5jbGllbnQuaWNhLmdudTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMZ+ZtOHp4Y5pGKByFWwfoBaqMzBToHBmTSzJmtzi4izDltA +HRI7SQjQL0cALV1xxDSv08TMjSXXVI1HmSDOkFTX6GOS/gEBMvEgtQATyXaPbT+Y +0mz5qQLzKrkN0nHu/DD3e8gsNuWWm8o/sj4WKptTwQU6LhlUITHAgqiVB/2nbLuX +g0onddoELIkqE6agtL68w0AkiFkp2JR07t7IcpJddrLHj0O0Nyp1YMHTqnWy5/Sr +QhmPJvTKddT+qwBr/0yX6krKdF6lvErZflXOUV7B8o5fbzi/7eFtcaWYXp6TInAU +rO2QSb7b48Za/n5LadN5N1OwKhBIt7XqAkqB/2sCAwEAAaNCMEAwHQYDVR0OBBYE +FKCPK5G3BvjL8Cqjpfx3p+1GY/spMB8GA1UdIwQYMBaAFBT62nf4RZK3fDj8dMom +dCu31DZ1MA0GCSqGSIb3DQEBCwUAA4IBAQCatCsTv7E5D3C8we3ffiiRAREHoZPr +CFhKWbZzgDP2GQVlta048vgXNPEGiV+hCt3FMsz5NlJZ6DN75OJHk4hN8OC5/9Ke +Ne4RYGBDdvlBHIqWfEA357Zf9tHeJG7VIXeujErKylpyTI3Ptn5NRgDatwetf7FB +kCcy2obeGbkzG5iCtKQW3lAkZOliliXJVXieWJeMCGtbSX3l4gqOTgJ4ZBLJMS2A +JFPAuMaPyLx2kmHCmhzt7SHd05o7r7q0d2ZFl/ECrmd8ZdfI2Fg4wu9ZBxv1IMfq +Wjhj3vmM/LOf5ECJGf0hvObhCPszpPlp2KRY+a1f+tNKjeiYRVbDzzX4 +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/client-of-rca-csr.pem b/src/tests/client_server/data/client-of-rca-csr.pem new file mode 100644 index 00000000..43aeb12c --- /dev/null +++ b/src/tests/client_server/data/client-of-rca-csr.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICpDCCAYwCAQAwXzELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0 +dHMxDzANBgNVBAcMBkJvc3RvbjEPMA0GA1UECgwGQ2xpZW50MRYwFAYDVQQDDA1j +bGllbnQuY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvpbW +hjGKQ8gXjLI0irfHeKLQSr0z+rcY7CIwYPx6AkzaFrFqqBJhZhvHBihMhU7d+p/G +NJqvKUSUZYEvWujI2jIqwStUewUb4yllQR0YKS7VzF11KOF75F7WEtNhAYSpbBcB +sxrhuOnw9bQKJ5wsvQGorb0esiGy9jPFdnpux4eD1xAJ2xt5zsuoWcsGWZ23CQJv +oAEBWmJW/VtJeQ1axvf9sP6bPkRiqvOHdx5I7kTaDRUDhSEYopunHP4dBjJ007nh +9b181P0GbCaHLGKRFCx5rmgfemIpILbqzWNLqyHOev+WZqH9cjQHbKN3CLaOtc+X +S7894m7Kw9mbUl9nQwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAEsVXFr54RMQ +yrgO2Nac3jC/04qljxcSRY4XF4XL7oMEy0WfzHNX9t8qCSK4cKTzxvq2zhOxMT/E +gBOgy6sBxtldrYJA1cVuSLf5RD5KdPoHM7dqSHWpW2Ii01RIglO1R7RvAAT/A9I4 +LXp4Kv5dGdzQNpMUmembT7s+k1at0+u5u8Vtyh8KhYIrPr5PxZcz222Ii0mQV2WY +h6M+jdaGsQGZB7wFNQocl8LAmrKIJYE5/eJLFOb7ZxsVOhMOkaezlv2WI9rEOVMs +La2dLJzWNx3nYXvsP98siAchgw6lffP+PuvHczW4WNKQ5X0lH5HbHcdy1bm/3xiZ +bpBMZjUCEyw= +-----END CERTIFICATE REQUEST----- diff --git a/src/tests/client_server/data/client-of-rca-private-key.pem b/src/tests/client_server/data/client-of-rca-private-key.pem new file mode 100644 index 00000000..64f4c38e --- /dev/null +++ b/src/tests/client_server/data/client-of-rca-private-key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQQsqWoEOIi7jq+VEW6 +Fl2i8AICCAAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEELQO7YW/6Hi5yQFu +/oyhhCEEggTQue0jpR9VOOuXtxtLTbDMMMiaqi/vbkyBAg7wtP5J0XgVg66H93TA +qMIfBmRESuAdE9taBuq68sCaTK2vjM0rSPI/SeY+nYPrbppF7mG/FrpCxO/l/57T +P1I4rbuPkMnhd4d0tg2CAyQ7s3tSXtyCrUtLs8RO8oAraVT0wzzkjtjn7EvVJVuC +HSb4nyFZEZmup5JO2tLB/izcP1voOA1O10f9tgAQQgCPiW1WDl5uxkwe0Be1GgWz +DJrBkOE/XK85XcCkFZX5yvJVKNiFYyQPlLVTfb4mrx3SMUpKsuLdQhohnNvflxWo +ltlgJhJUU9lN+xN/5D9h+Tct8nF5E0O2rc1igFNCg2fi8lQzyue4TnKp6ukbVdPX +/7amuwynHeGdvkA4qwU2c+VGSy42tPzO1sKB+M5i+djnteTjp3mq7vvjFWzVXZJ0 +xBjaCf11dQVOr5/bYfpBsRW2tv7eIg2//IFQHy5nHr3kHRPMl4LLf+8bz3GF5ouM +g17psyX85ruIMPOBjFyDGKYYjE3Ly2JgAij7IGE177DqLtfgsiEvuhXZwGR4NSG0 +DDPdk95/8H8TJkEFsKuI1CRsjBpuMEBqpvqALUXYrhjsaTo0GOtOW8GXAt81ISTI +E1QWgpwK0mAUkkShdCSfCy1A/ZcBxbx2iKQA1jFofrqnyqlaWv9NVVqj1IOAmr4i +zREFqLbAMLUW74s8RCNsmAfhmPYlcROImzMD2WN3ezWxwbNfrzeuy5pXz6naowpi +I3jTaSWLh/KnolTiFOnAOBolYc88BuOXtqGxrJw0ow638jR9nIDeep2eOqzxvKDn +PhG9QhM1OC7FrfQ7ic0tmqW951BkbcafYqPObqMXUWIFDmW+OnlIOnNcRIuhY4pe +F3yym2uGgmto/MHiQmknyJDm+qqV1JpPaxFjp7KISnjCxaU3WS7CeDe9NPOc9CSx +/U+zSUnqOLZ7ze6QkUDZ4NPqJVJ6OmAWD0QE/4DkDDgiJybSk+WHTu4TneF5xZBr +Y2WctZNMfGML5a1GoPWxvP+rYV6SY4l9AP+41twTyawvyT/ynWLOIBQPs9Un3xXx +A+wTvl6jQXF7VN1HrSZKHRqTFDy82xhrUHquL8rwV10yCMKLwNf4xMQk4ZhxXL3s +n39baqkakv62/XE+dgAx1yOVgPoF4X4nMFfLEeEqml8M6j4vVGXrmWySZokpgNyM +J7j3HWf0SXIHGvRSnVYkOA/dG5dKDubYl5sJ1raKdLfdpmo9P9rrAn/Pn8UXo3Ve +lzDN1ZXL62Nx4jwVEv55Uq+sm4PYwnV88sfhC8N2B35yxiogIulKc5GhP4VqEkbQ +mh3zZGsXN/dgpLgl1yLqwyF8OshOK1fE2WCY0AgghK7RKe5lxbPyW1Fh3LYYKtIF +e532j600NJ1iutMkuFGWMCQlZ7O+GNGlKyHl8TdgghSB+bjSUeuaGJfGxP6KMqZ5 +lKSPhHlqtdCcKpag92PhqWtqMv+taduhx6rW1Zwjd410DDc1Zm1oCsdoKenPYpCn +xH+glIypum+0lg9qxhDjrrXAlIjWu1+ZV/RB8eT8O9be1UMGjzQ37yT2ztAeKYpy +Av3WW7qeA8PJQu6Vp+34pQgCjmxSbwhIMQqP92lGmBSpIPsp/wLTZKk= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/src/tests/client_server/data/client-of-rca-signed-cert.pem b/src/tests/client_server/data/client-of-rca-signed-cert.pem new file mode 100644 index 00000000..ff9f53d3 --- /dev/null +++ b/src/tests/client_server/data/client-of-rca-signed-cert.pem @@ -0,0 +1,76 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, L=Boston, O=Root, CN=ca.gnu + Validity + Not Before: Nov 29 12:47:17 2024 GMT + Not After : Nov 29 12:47:17 2025 GMT + Subject: C=US, ST=Massachusetts, O=Client, CN=client.ca.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:be:96:d6:86:31:8a:43:c8:17:8c:b2:34:8a:b7: + c7:78:a2:d0:4a:bd:33:fa:b7:18:ec:22:30:60:fc: + 7a:02:4c:da:16:b1:6a:a8:12:61:66:1b:c7:06:28: + 4c:85:4e:dd:fa:9f:c6:34:9a:af:29:44:94:65:81: + 2f:5a:e8:c8:da:32:2a:c1:2b:54:7b:05:1b:e3:29: + 65:41:1d:18:29:2e:d5:cc:5d:75:28:e1:7b:e4:5e: + d6:12:d3:61:01:84:a9:6c:17:01:b3:1a:e1:b8:e9: + f0:f5:b4:0a:27:9c:2c:bd:01:a8:ad:bd:1e:b2:21: + b2:f6:33:c5:76:7a:6e:c7:87:83:d7:10:09:db:1b: + 79:ce:cb:a8:59:cb:06:59:9d:b7:09:02:6f:a0:01: + 01:5a:62:56:fd:5b:49:79:0d:5a:c6:f7:fd:b0:fe: + 9b:3e:44:62:aa:f3:87:77:1e:48:ee:44:da:0d:15: + 03:85:21:18:a2:9b:a7:1c:fe:1d:06:32:74:d3:b9: + e1:f5:bd:7c:d4:fd:06:6c:26:87:2c:62:91:14:2c: + 79:ae:68:1f:7a:62:29:20:b6:ea:cd:63:4b:ab:21: + ce:7a:ff:96:66:a1:fd:72:34:07:6c:a3:77:08:b6: + 8e:b5:cf:97:4b:bf:3d:e2:6e:ca:c3:d9:9b:52:5f: + 67:43 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 7D:AD:67:F3:E1:9C:7E:76:DE:AA:2B:C4:E2:8C:4C:F9:92:C8:62:04 + X509v3 Authority Key Identifier: + B2:F7:59:A1:7D:D1:C5:D3:7A:C2:B3:8D:AF:7D:52:38:0F:50:6D:CE + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 5a:d8:e8:7a:a1:52:cd:0f:e6:7d:6c:9b:6e:d4:70:2f:bd:1c: + 91:43:52:40:36:99:04:de:c8:27:21:97:29:64:bf:ad:51:d2: + 6e:76:71:89:14:7d:f7:4e:81:49:14:88:e7:c8:67:ad:3a:f6: + fd:e7:1e:6a:dd:27:cf:32:40:87:27:54:a0:e2:2c:dd:ce:19: + f3:8a:b8:ef:1c:60:3e:e0:fa:07:18:9e:f7:9f:f9:f1:c1:5e: + 4e:e8:a2:d3:88:bf:b6:ef:2d:80:42:d9:69:90:a9:bd:5a:7e: + 63:54:b0:f1:46:eb:10:72:5c:dc:17:e7:f2:85:ff:eb:47:09: + 69:03:64:4e:72:bf:1d:7a:45:de:8b:84:ce:aa:c5:14:78:d3: + f8:0b:bc:2e:a1:c6:3d:71:eb:68:38:72:b1:05:dc:a5:7c:72: + 12:61:f6:a9:3d:c0:1d:3d:df:01:f1:e9:d7:75:a9:6a:37:6d: + a5:48:ed:eb:53:e1:bd:d0:ec:eb:92:62:b9:90:bb:cb:05:da: + 70:8e:33:f5:fc:bd:a3:50:a9:8e:47:82:01:66:11:51:5c:74: + cc:4d:a2:c4:de:56:75:8d:01:c1:e8:47:13:c1:d7:8c:ec:67: + 84:6a:aa:a8:9a:d9:0c:9b:11:df:ab:51:a7:27:6b:b7:de:47: + 18:99:d5:2b +-----BEGIN CERTIFICATE----- +MIIDYjCCAkqgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UE +CgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0MTEyOTEyNDcxN1oXDTI1MTEy +OTEyNDcxN1owTjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMx +DzANBgNVBAoMBkNsaWVudDEWMBQGA1UEAwwNY2xpZW50LmNhLmdudTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAL6W1oYxikPIF4yyNIq3x3ii0Eq9M/q3 +GOwiMGD8egJM2haxaqgSYWYbxwYoTIVO3fqfxjSarylElGWBL1royNoyKsErVHsF +G+MpZUEdGCku1cxddSjhe+Re1hLTYQGEqWwXAbMa4bjp8PW0CiecLL0BqK29HrIh +svYzxXZ6bseHg9cQCdsbec7LqFnLBlmdtwkCb6ABAVpiVv1bSXkNWsb3/bD+mz5E +Yqrzh3ceSO5E2g0VA4UhGKKbpxz+HQYydNO54fW9fNT9BmwmhyxikRQsea5oH3pi +KSC26s1jS6shznr/lmah/XI0B2yjdwi2jrXPl0u/PeJuysPZm1JfZ0MCAwEAAaNC +MEAwHQYDVR0OBBYEFH2tZ/PhnH523qorxOKMTPmSyGIEMB8GA1UdIwQYMBaAFLL3 +WaF90cXTesKzja99UjgPUG3OMA0GCSqGSIb3DQEBCwUAA4IBAQBa2Oh6oVLND+Z9 +bJtu1HAvvRyRQ1JANpkE3sgnIZcpZL+tUdJudnGJFH33ToFJFIjnyGetOvb95x5q +3SfPMkCHJ1Sg4izdzhnzirjvHGA+4PoHGJ73n/nxwV5O6KLTiL+27y2AQtlpkKm9 +Wn5jVLDxRusQclzcF+fyhf/rRwlpA2ROcr8dekXei4TOqsUUeNP4C7wuocY9ceto +OHKxBdylfHISYfapPcAdPd8B8enXdalqN22lSO3rU+G90OzrkmK5kLvLBdpwjjP1 +/L2jUKmOR4IBZhFRXHTMTaLE3lZ1jQHB6EcTwdeM7GeEaqqomtkMmxHfq1GnJ2u3 +3kcYmdUr +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/client2-of-ica-chain.pem b/src/tests/client_server/data/client2-of-ica-chain.pem new file mode 100644 index 00000000..7db403c1 --- /dev/null +++ b/src/tests/client_server/data/client2-of-ica-chain.pem @@ -0,0 +1,177 @@ +-----BEGIN CERTIFICATE----- +MIIDjTCCAnWgAwIBAgIUKkxAx2lVnvYcaNqBpJmTgXh1/VgwDQYJKoZIhvcNAQEL +BQAwVjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNV +BAcMBkJvc3RvbjENMAsGA1UECgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0 +MTEyOTEyNDUyOFoXDTM0MTEyNzEyNDUyOFowVjELMAkGA1UEBhMCVVMxFjAUBgNV +BAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UECgwEUm9v +dDEPMA0GA1UEAwwGY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA23YSrcGIBgZf9bbzTnmYFy+4tM82kUhsVFKxWCNEMdKmhaeVvXogyd6Evq4P +NvBGdUABDtHp4pSEijrxWbn8sxddTznoT/8IOuHI0/PtwXYP/sHQ/HzekEUVKN2Z +NMbMUzQfaJyiIV5TrZlaBwHjQ+sRs8E56C3cQjkwuyjll2zDsEfmEnPimZRAL3kb +wW8VFfBcR2Id+a9xKjwlnB4eXQFAgYINoRgCtUOUxSeFgNnwkOUSqDknO6Xi47YZ +EdLlHyUnv5eX547xUkrYhfQuQwaqpGrjHf3GFoysN8P9kd2f1qsJKtQcUbF9DDeZ +6ya47X/LBO8QflMsVjb1V3oz9QIDAQABo1MwUTAdBgNVHQ4EFgQUsvdZoX3RxdN6 +wrONr31SOA9Qbc4wHwYDVR0jBBgwFoAUsvdZoX3RxdN6wrONr31SOA9Qbc4wDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAS3PyV7crGk9brqU90aML +2TWkjgzFb3/nASnpvVYiqyiV4neGiEjtDy7eVlqP6GlD2pYcVodY+ly9wNlo85/h +YfgCFFl37tMG7PpRac2qBqaSn1DpwsCb08LjRrOvoaRffWUikSoZmsYDlaCgl9nT +pGtIrz0BSoyu5mHalIZTVQOrbkNBNK6ZgnYy2iWuiLa5Z1xzKpsRBRaKJc1pcQE/ +QVbPdCiyGQMPEVn/KHxitlycFoee/fA+izXVdstVwfig2DoMvrlGZvEkN1ER3Yz4 +QPJ6HzOsBQL1F+YhnMCQfc2rpcwxAWf8JMy6jsCq42KGq53tkWqHyQ6Zu2SiLRYk +CA== +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, L=Boston, O=Root, CN=ca.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:d5:1f:d7:1a:46:9a:70:ed:6a:88:af:be:80:04: + 42:32:26:cf:c4:d8:11:05:21:3f:b3:ef:29:d9:a3: + 39:37:b7:89:d5:64:9a:cc:c1:f4:9c:0a:8b:41:cb: + 09:7e:ab:16:62:24:6b:69:ea:ba:78:a2:97:a3:e4: + 0a:06:c2:2e:14:31:20:15:61:74:7d:70:5d:e8:9f: + 33:63:4b:08:81:8b:8f:5a:19:af:92:99:c6:c5:a2: + a4:16:f9:1c:fd:bb:03:f4:2a:1e:98:f2:b2:c1:20: + 69:0e:96:ea:3e:dc:b5:91:40:1f:aa:51:a6:a4:09: + 06:2f:d9:be:b0:e3:4e:d4:27:2c:b3:74:b2:90:08: + 09:d6:cb:7a:4f:f0:dd:43:99:ef:22:24:94:04:c0: + 70:48:ba:d8:c4:4f:64:89:bf:7a:a3:74:27:d6:1f: + a7:ab:04:20:e6:99:c8:8f:2f:14:99:02:d1:eb:ce: + 2b:0f:ba:5e:b4:80:22:7b:ef:3c:0a:90:a4:97:7b: + 4c:19:5f:d4:5e:d7:21:32:3f:3e:05:8a:67:01:d9: + 39:f5:7e:39:a7:cf:64:c1:4a:d7:b5:c2:f4:a2:c0: + a4:ef:9f:25:96:96:95:bb:bc:44:27:7f:eb:dd:43: + b4:28:4a:70:f6:21:83:0f:59:cb:98:69:57:8f:ca: + a8:93 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + X509v3 Authority Key Identifier: + 1A:03:C0:AD:5C:3D:FE:76:38:FC:20:8C:B2:73:5C:A3:44:1D:0F:EC + X509v3 Basic Constraints: critical + CA:TRUE, pathlen:0 + X509v3 Key Usage: critical + Digital Signature, Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 00:f7:92:a1:7e:cb:38:f6:62:28:fc:86:ea:7d:64:2a:0e:3d: + 95:e9:86:d1:00:29:42:5f:97:27:60:31:33:6b:b1:40:9e:d0: + 20:fd:c9:a1:19:21:41:91:6d:d0:97:af:0a:9f:e9:55:b8:fe: + 66:20:c6:42:31:9b:8e:08:8e:ea:cb:86:17:e9:12:49:43:de: + 03:74:a2:19:77:7e:4f:ef:f6:3c:7e:d3:ed:47:fd:24:9b:d5: + cc:29:4a:cf:30:d9:40:bc:73:d9:d6:5f:f1:75:48:f8:00:06: + 2c:a3:84:f0:9d:0c:51:14:40:d0:9d:4b:7c:79:20:93:b9:2f: + 29:f6:39:ae:36:4f:08:45:65:43:f7:4e:5d:88:84:da:fd:46: + a3:14:2e:cb:b9:fa:80:b4:a6:bf:db:72:91:0d:05:a5:82:f6: + f9:6c:81:8b:2b:d9:13:5c:cd:d5:da:4b:31:5e:f0:4d:9a:a7: + 2e:cb:73:6e:7e:07:7c:4a:cc:9a:12:f0:cb:86:34:50:73:c6: + 2c:40:23:73:ed:7f:f5:c9:61:8e:85:8b:37:fc:33:20:af:fd: + 6d:4a:cc:3f:60:22:7b:ef:c4:9c:51:d6:f3:de:7c:06:40:a8: + 4f:ea:38:07:b5:df:4f:b0:56:22:af:50:3d:6b:eb:46:42:7b: + a1:3b:1b:df +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UE +CgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0MTEyNzIwNTExOVoXDTI1MTEy +NzIwNTExOVowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMx +DDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwHaWNhLmdudTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANUf1xpGmnDtaoivvoAEQjImz8TYEQUhP7PvKdmjOTe3 +idVkmszB9JwKi0HLCX6rFmIka2nquniil6PkCgbCLhQxIBVhdH1wXeifM2NLCIGL +j1oZr5KZxsWipBb5HP27A/QqHpjyssEgaQ6W6j7ctZFAH6pRpqQJBi/ZvrDjTtQn +LLN0spAICdbLek/w3UOZ7yIklATAcEi62MRPZIm/eqN0J9Yfp6sEIOaZyI8vFJkC +0evOKw+6XrSAInvvPAqQpJd7TBlf1F7XITI/PgWKZwHZOfV+OafPZMFK17XC9KLA +pO+fJZaWlbu8RCd/691DtChKcPYhgw9Zy5hpV4/KqJMCAwEAAaNmMGQwHQYDVR0O +BBYEFBT62nf4RZK3fDj8dMomdCu31DZ1MB8GA1UdIwQYMBaAFBoDwK1cPf52OPwg +jLJzXKNEHQ/sMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMA0G +CSqGSIb3DQEBCwUAA4IBAQAA95Khfss49mIo/IbqfWQqDj2V6YbRAClCX5cnYDEz +a7FAntAg/cmhGSFBkW3Ql68Kn+lVuP5mIMZCMZuOCI7qy4YX6RJJQ94DdKIZd35P +7/Y8ftPtR/0km9XMKUrPMNlAvHPZ1l/xdUj4AAYso4TwnQxRFEDQnUt8eSCTuS8p +9jmuNk8IRWVD905diITa/UajFC7LufqAtKa/23KRDQWlgvb5bIGLK9kTXM3V2ksx +XvBNmqcuy3Nufgd8SsyaEvDLhjRQc8YsQCNz7X/1yWGOhYs3/DMgr/1tSsw/YCJ7 +78ScUdbz3nwGQKhP6jgHtd9PsFYir1A9a+tGQnuhOxvf +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA-Client, CN=other.ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:9d:83:3b:b3:8c:a9:c6:2c:61:c5:c6:ba:78:c7: + 0a:bd:31:e6:33:cb:27:39:18:0b:84:ca:ac:95:f2: + d1:ac:7a:c2:6d:7a:b0:c0:e0:7b:07:53:33:4a:73: + 95:e4:ce:7b:dc:7c:c0:cf:39:67:69:32:2c:29:07: + ef:cc:d2:42:c2:3d:35:bc:6c:86:1a:fa:22:65:37: + 84:92:8d:f3:a8:05:61:8f:06:13:bc:29:78:48:5e: + 10:59:9f:0c:c6:50:d4:13:26:6d:8e:74:cc:92:b2: + f2:07:0e:3c:6d:29:93:44:6a:4e:94:8f:20:17:e0: + 84:58:a5:68:7f:67:bf:cc:61:62:7c:9c:7f:11:48: + 86:5d:21:35:04:c8:9e:43:ea:10:13:70:ec:94:6e: + 9b:fa:5c:6a:e9:28:de:cd:1f:e8:50:db:0e:8b:bf: + 06:8f:4b:41:42:25:10:05:3c:c0:90:4d:e9:8d:3b: + cc:ba:66:2f:d7:d0:51:06:7d:d3:ec:2d:c1:af:08: + 44:40:a8:ad:00:83:99:71:aa:13:d4:7c:ad:eb:8f: + 97:56:f4:42:25:f8:04:49:b7:04:d4:42:cb:c5:84: + aa:c1:b9:6e:eb:b8:e9:40:91:ef:12:2f:35:42:4b: + 24:a2:e2:84:b4:36:0b:a3:4c:a2:50:f1:54:af:3d: + 20:2d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + FA:DA:58:04:3E:83:3F:E7:6D:70:67:98:F4:91:3B:C2:93:64:CE:B9 + X509v3 Authority Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 65:ea:4d:a3:36:29:53:f4:fc:06:3c:24:04:f6:82:c3:ff:d5: + b7:b4:9a:ea:aa:d5:40:6d:6d:11:a2:05:ca:68:1d:91:9f:54: + 63:8a:b6:9f:1b:a2:0a:38:4d:f7:d9:24:68:bc:0b:4d:82:5d: + e1:6b:28:2f:27:ae:44:35:83:68:00:0b:b2:37:6c:4c:59:0e: + c3:2d:71:25:46:98:47:36:a8:c5:f3:36:2a:65:0e:7f:10:71: + 3b:82:35:2e:5b:59:d0:3f:c0:ef:b5:f3:c1:33:76:0d:e3:9a: + 00:2a:24:f0:f9:ba:57:01:d4:1d:c4:60:48:81:42:5f:81:02: + 59:10:4f:f7:56:fd:5b:b9:eb:95:e8:9d:22:88:5c:37:e2:56: + 2b:e6:73:42:c5:05:4c:3f:3e:fa:05:b9:b4:e5:e8:21:1b:88: + e1:20:0e:02:f1:70:e3:f6:23:f6:5c:12:92:cd:16:da:04:b2: + b6:d9:b4:34:db:46:0a:ac:4d:b1:01:ee:d3:14:ef:92:84:9d: + 3c:f3:f7:75:6a:da:ae:7d:a9:c1:10:36:6f:84:ea:c1:07:89: + c1:d0:78:43:34:00:22:16:5e:df:82:37:64:c9:e9:8f:5b:d3: + 9b:bb:f2:ea:ea:59:24:00:77:27:27:20:41:38:f9:7b:d6:87: + 6a:80:55:6c +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwH +aWNhLmdudTAeFw0yNDExMjcyMDUxMTlaFw0yNTExMjcyMDUxMTlaMFIxCzAJBgNV +BAYTAlVTMRYwFAYDVQQIDA1NYXNzYWNodXNldHRzMRMwEQYDVQQKDApJQ0EtQ2xp +ZW50MRYwFAYDVQQDDA1vdGhlci5pY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnYM7s4ypxixhxca6eMcKvTHmM8snORgLhMqslfLRrHrCbXqw +wOB7B1MzSnOV5M573HzAzzlnaTIsKQfvzNJCwj01vGyGGvoiZTeEko3zqAVhjwYT +vCl4SF4QWZ8MxlDUEyZtjnTMkrLyBw48bSmTRGpOlI8gF+CEWKVof2e/zGFifJx/ +EUiGXSE1BMieQ+oQE3DslG6b+lxq6SjezR/oUNsOi78Gj0tBQiUQBTzAkE3pjTvM +umYv19BRBn3T7C3BrwhEQKitAIOZcaoT1Hyt64+XVvRCJfgESbcE1ELLxYSqwblu +67jpQJHvEi81QkskouKEtDYLo0yiUPFUrz0gLQIDAQABo0IwQDAdBgNVHQ4EFgQU ++tpYBD6DP+dtcGeY9JE7wpNkzrkwHwYDVR0jBBgwFoAUFPrad/hFkrd8OPx0yiZ0 +K7fUNnUwDQYJKoZIhvcNAQELBQADggEBAGXqTaM2KVP0/AY8JAT2gsP/1be0muqq +1UBtbRGiBcpoHZGfVGOKtp8bogo4TffZJGi8C02CXeFrKC8nrkQ1g2gAC7I3bExZ +DsMtcSVGmEc2qMXzNiplDn8QcTuCNS5bWdA/wO+188Ezdg3jmgAqJPD5ulcB1B3E +YEiBQl+BAlkQT/dW/Vu565XonSKIXDfiVivmc0LFBUw/PvoFubTl6CEbiOEgDgLx +cOP2I/ZcEpLNFtoEsrbZtDTbRgqsTbEB7tMU75KEnTzz93Vq2q59qcEQNm+E6sEH +icHQeEM0ACIWXt+CN2TJ6Y9b05u78urqWSQAdycnIEE4+XvWh2qAVWw= +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/client2-of-ica-private-key.pem b/src/tests/client_server/data/client2-of-ica-private-key.pem new file mode 100644 index 00000000..951cbc47 --- /dev/null +++ b/src/tests/client_server/data/client2-of-ica-private-key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQQkyJb2L+l2SHwm4ED +6dl5KwICCAAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEDYMO1EA4Ga2ohoO +04BLnI4EggTQCHrtD/9rHU5GPZAZArzSAjSlkPauOSVDBZjRFbZwyiiEVGArciTv +JHiY8z53hikrkggTuepSf/SwG4g6R/u5+hdmy9caRE5LhF+luVYY/CI4X8uli7eR +8yTpPTZbG7oOfuv8eh1YJeAi0KRtPWgFqM/d2yi5iwXIfNIGM8rvdSFTwGZUauz9 +Hnjo0oxpN4GfPHn4aeB35Jpf295QBmWAam7O81xcINosHn+ena7UiDJRa8ayoepx +skdPyYJq54VwDkyJ4letgUFYj4DEfoaGAnehO6S4eD/lDDxuQA108V0vUK/lrAJP +jOWPCfdzua2pjtF7EOV8zdj+akqqhHhPdA3Tmc5UW5+yU/i5dJFyk7TqysLL5NGR +pCCI8ZDCnERtJ9AoHprpkYkzRAnXu5KxKU7TNeg2tbEwxGC4XTg077a7tfa4oQOc +sUaY4+y7Vm3J81N1vUqvLoEbpQUOTBt15j0yLfVj8X6SI5QIOUWFBR80MGtvX1T+ +mAsMDVaUTSg5snWuQEqgiz4Auvu4S0EPXQksGQSX1ALsMuoYmn0CTDPuHTBA4OMS +XVYD26sDxQfY5P7xrM/0iZN4Or0+rFHYCaP49lDbblo6+fGx7vqR7Fok6HxUnYPw +qDlkRpM45JfAYgnOLAePugToVRWBR9qsfmDHjkUeA5VIKOySMr5SAF/L68yjzmj4 +GzEJ7ZaXzQ5PL3T3/gFGxQUI2EW6Pq0CFDC6QaDG0Fhl7T3hoHLxTw+4ii5SSB71 +16J3MYThILaFRgKweKfb52VmNj9DsTES0JIxC+K0AkauSpyNjMza9WOFwuewHN+w +p+CimbuRvPKvTuPUhS7LxZUqC5CQyeK/fNhp79W/Cl4uEDzwWZRyNUzSs7BbZDbC +f9auQTJ0rzwDZZeR9eajVhxwJFcmEchrb8ZKBf0+ELphSGtyLBaDcbUHBI51eIub +nJHcG92T2OPmYnZpD6REfhE4tjmKIAqtRd7RGq0qEhwLjihR6lU0upt3r6K/q0mb +nPqxBIuo7rVY1Vl4MshjoQd25ZSGYCY4aYT4cnmoY1maNJ0RujNbsz1qsmG8URuO +NL3UlmqnTLv62b0mIbz5vjMIr7i9YPkg/mCqr/nZYJGEy0RJBa48ae4f+BLh2CqQ +05BIByVrknhgCP5NXwg4vgeU0nuXbr5Y8w9qqYv4MRwSquylsP6AxaTPzsx47xwr +kPzrIxEHMllG2uS7jilh5rQvTorBPeop7y5IKbQQnjI99wcDubCWHHNbfCsBATz6 +gTxpOmyX+NSdhx5u12rAp+yQpDATBhHXwYm2/JqlyZ86JZmK7HR0qggK+01OpcG2 +0rPqawP6QbVo+wJ0TJoghOq+9mJtS1pt1ldZQijMCPoe+Latw29PyGjPVGgWP9dM +QiA0Sm3Z+WXlz6vM0ZPsM+KtjqAZYQJzjQH7c2k9G6NKEpbgseUlwZKgtRPc4/ba +nagBvARgZ771olhTkN2ysWSCjTWijLLQPopM2T8bbTzo4RsVmmsjPAYpDRBqY+5U +aJlBboG10/Bkzal7XZIX6dkZ8a7oKW0h6bmO5Byr+uGVVQeuNnrJxRHJWUA6H8S9 +mzC+T2Irg9TvuQZX9PvrTLgyNpGuCCcDlJessUJ5oEaEiGCGBuoRHYA= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/src/tests/client_server/data/client2-of-ica-signed-cert.pem b/src/tests/client_server/data/client2-of-ica-signed-cert.pem new file mode 100644 index 00000000..3a7a8f5f --- /dev/null +++ b/src/tests/client_server/data/client2-of-ica-signed-cert.pem @@ -0,0 +1,75 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA-Client, CN=other.ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:9d:83:3b:b3:8c:a9:c6:2c:61:c5:c6:ba:78:c7: + 0a:bd:31:e6:33:cb:27:39:18:0b:84:ca:ac:95:f2: + d1:ac:7a:c2:6d:7a:b0:c0:e0:7b:07:53:33:4a:73: + 95:e4:ce:7b:dc:7c:c0:cf:39:67:69:32:2c:29:07: + ef:cc:d2:42:c2:3d:35:bc:6c:86:1a:fa:22:65:37: + 84:92:8d:f3:a8:05:61:8f:06:13:bc:29:78:48:5e: + 10:59:9f:0c:c6:50:d4:13:26:6d:8e:74:cc:92:b2: + f2:07:0e:3c:6d:29:93:44:6a:4e:94:8f:20:17:e0: + 84:58:a5:68:7f:67:bf:cc:61:62:7c:9c:7f:11:48: + 86:5d:21:35:04:c8:9e:43:ea:10:13:70:ec:94:6e: + 9b:fa:5c:6a:e9:28:de:cd:1f:e8:50:db:0e:8b:bf: + 06:8f:4b:41:42:25:10:05:3c:c0:90:4d:e9:8d:3b: + cc:ba:66:2f:d7:d0:51:06:7d:d3:ec:2d:c1:af:08: + 44:40:a8:ad:00:83:99:71:aa:13:d4:7c:ad:eb:8f: + 97:56:f4:42:25:f8:04:49:b7:04:d4:42:cb:c5:84: + aa:c1:b9:6e:eb:b8:e9:40:91:ef:12:2f:35:42:4b: + 24:a2:e2:84:b4:36:0b:a3:4c:a2:50:f1:54:af:3d: + 20:2d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + FA:DA:58:04:3E:83:3F:E7:6D:70:67:98:F4:91:3B:C2:93:64:CE:B9 + X509v3 Authority Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 65:ea:4d:a3:36:29:53:f4:fc:06:3c:24:04:f6:82:c3:ff:d5: + b7:b4:9a:ea:aa:d5:40:6d:6d:11:a2:05:ca:68:1d:91:9f:54: + 63:8a:b6:9f:1b:a2:0a:38:4d:f7:d9:24:68:bc:0b:4d:82:5d: + e1:6b:28:2f:27:ae:44:35:83:68:00:0b:b2:37:6c:4c:59:0e: + c3:2d:71:25:46:98:47:36:a8:c5:f3:36:2a:65:0e:7f:10:71: + 3b:82:35:2e:5b:59:d0:3f:c0:ef:b5:f3:c1:33:76:0d:e3:9a: + 00:2a:24:f0:f9:ba:57:01:d4:1d:c4:60:48:81:42:5f:81:02: + 59:10:4f:f7:56:fd:5b:b9:eb:95:e8:9d:22:88:5c:37:e2:56: + 2b:e6:73:42:c5:05:4c:3f:3e:fa:05:b9:b4:e5:e8:21:1b:88: + e1:20:0e:02:f1:70:e3:f6:23:f6:5c:12:92:cd:16:da:04:b2: + b6:d9:b4:34:db:46:0a:ac:4d:b1:01:ee:d3:14:ef:92:84:9d: + 3c:f3:f7:75:6a:da:ae:7d:a9:c1:10:36:6f:84:ea:c1:07:89: + c1:d0:78:43:34:00:22:16:5e:df:82:37:64:c9:e9:8f:5b:d3: + 9b:bb:f2:ea:ea:59:24:00:77:27:27:20:41:38:f9:7b:d6:87: + 6a:80:55:6c +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwH +aWNhLmdudTAeFw0yNDExMjcyMDUxMTlaFw0yNTExMjcyMDUxMTlaMFIxCzAJBgNV +BAYTAlVTMRYwFAYDVQQIDA1NYXNzYWNodXNldHRzMRMwEQYDVQQKDApJQ0EtQ2xp +ZW50MRYwFAYDVQQDDA1vdGhlci5pY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAnYM7s4ypxixhxca6eMcKvTHmM8snORgLhMqslfLRrHrCbXqw +wOB7B1MzSnOV5M573HzAzzlnaTIsKQfvzNJCwj01vGyGGvoiZTeEko3zqAVhjwYT +vCl4SF4QWZ8MxlDUEyZtjnTMkrLyBw48bSmTRGpOlI8gF+CEWKVof2e/zGFifJx/ +EUiGXSE1BMieQ+oQE3DslG6b+lxq6SjezR/oUNsOi78Gj0tBQiUQBTzAkE3pjTvM +umYv19BRBn3T7C3BrwhEQKitAIOZcaoT1Hyt64+XVvRCJfgESbcE1ELLxYSqwblu +67jpQJHvEi81QkskouKEtDYLo0yiUPFUrz0gLQIDAQABo0IwQDAdBgNVHQ4EFgQU ++tpYBD6DP+dtcGeY9JE7wpNkzrkwHwYDVR0jBBgwFoAUFPrad/hFkrd8OPx0yiZ0 +K7fUNnUwDQYJKoZIhvcNAQELBQADggEBAGXqTaM2KVP0/AY8JAT2gsP/1be0muqq +1UBtbRGiBcpoHZGfVGOKtp8bogo4TffZJGi8C02CXeFrKC8nrkQ1g2gAC7I3bExZ +DsMtcSVGmEc2qMXzNiplDn8QcTuCNS5bWdA/wO+188Ezdg3jmgAqJPD5ulcB1B3E +YEiBQl+BAlkQT/dW/Vu565XonSKIXDfiVivmc0LFBUw/PvoFubTl6CEbiOEgDgLx +cOP2I/ZcEpLNFtoEsrbZtDTbRgqsTbEB7tMU75KEnTzz93Vq2q59qcEQNm+E6sEH +icHQeEM0ACIWXt+CN2TJ6Y9b05u78urqWSQAdycnIEE4+XvWh2qAVWw= +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/ica-chain.pem b/src/tests/client_server/data/ica-chain.pem new file mode 100644 index 00000000..0475f2a8 --- /dev/null +++ b/src/tests/client_server/data/ica-chain.pem @@ -0,0 +1,102 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, L=Boston, O=Root, CN=ca.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:d5:1f:d7:1a:46:9a:70:ed:6a:88:af:be:80:04: + 42:32:26:cf:c4:d8:11:05:21:3f:b3:ef:29:d9:a3: + 39:37:b7:89:d5:64:9a:cc:c1:f4:9c:0a:8b:41:cb: + 09:7e:ab:16:62:24:6b:69:ea:ba:78:a2:97:a3:e4: + 0a:06:c2:2e:14:31:20:15:61:74:7d:70:5d:e8:9f: + 33:63:4b:08:81:8b:8f:5a:19:af:92:99:c6:c5:a2: + a4:16:f9:1c:fd:bb:03:f4:2a:1e:98:f2:b2:c1:20: + 69:0e:96:ea:3e:dc:b5:91:40:1f:aa:51:a6:a4:09: + 06:2f:d9:be:b0:e3:4e:d4:27:2c:b3:74:b2:90:08: + 09:d6:cb:7a:4f:f0:dd:43:99:ef:22:24:94:04:c0: + 70:48:ba:d8:c4:4f:64:89:bf:7a:a3:74:27:d6:1f: + a7:ab:04:20:e6:99:c8:8f:2f:14:99:02:d1:eb:ce: + 2b:0f:ba:5e:b4:80:22:7b:ef:3c:0a:90:a4:97:7b: + 4c:19:5f:d4:5e:d7:21:32:3f:3e:05:8a:67:01:d9: + 39:f5:7e:39:a7:cf:64:c1:4a:d7:b5:c2:f4:a2:c0: + a4:ef:9f:25:96:96:95:bb:bc:44:27:7f:eb:dd:43: + b4:28:4a:70:f6:21:83:0f:59:cb:98:69:57:8f:ca: + a8:93 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + X509v3 Authority Key Identifier: + 1A:03:C0:AD:5C:3D:FE:76:38:FC:20:8C:B2:73:5C:A3:44:1D:0F:EC + X509v3 Basic Constraints: critical + CA:TRUE, pathlen:0 + X509v3 Key Usage: critical + Digital Signature, Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 00:f7:92:a1:7e:cb:38:f6:62:28:fc:86:ea:7d:64:2a:0e:3d: + 95:e9:86:d1:00:29:42:5f:97:27:60:31:33:6b:b1:40:9e:d0: + 20:fd:c9:a1:19:21:41:91:6d:d0:97:af:0a:9f:e9:55:b8:fe: + 66:20:c6:42:31:9b:8e:08:8e:ea:cb:86:17:e9:12:49:43:de: + 03:74:a2:19:77:7e:4f:ef:f6:3c:7e:d3:ed:47:fd:24:9b:d5: + cc:29:4a:cf:30:d9:40:bc:73:d9:d6:5f:f1:75:48:f8:00:06: + 2c:a3:84:f0:9d:0c:51:14:40:d0:9d:4b:7c:79:20:93:b9:2f: + 29:f6:39:ae:36:4f:08:45:65:43:f7:4e:5d:88:84:da:fd:46: + a3:14:2e:cb:b9:fa:80:b4:a6:bf:db:72:91:0d:05:a5:82:f6: + f9:6c:81:8b:2b:d9:13:5c:cd:d5:da:4b:31:5e:f0:4d:9a:a7: + 2e:cb:73:6e:7e:07:7c:4a:cc:9a:12:f0:cb:86:34:50:73:c6: + 2c:40:23:73:ed:7f:f5:c9:61:8e:85:8b:37:fc:33:20:af:fd: + 6d:4a:cc:3f:60:22:7b:ef:c4:9c:51:d6:f3:de:7c:06:40:a8: + 4f:ea:38:07:b5:df:4f:b0:56:22:af:50:3d:6b:eb:46:42:7b: + a1:3b:1b:df +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UE +CgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0MTEyNzIwNTExOVoXDTI1MTEy +NzIwNTExOVowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMx +DDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwHaWNhLmdudTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANUf1xpGmnDtaoivvoAEQjImz8TYEQUhP7PvKdmjOTe3 +idVkmszB9JwKi0HLCX6rFmIka2nquniil6PkCgbCLhQxIBVhdH1wXeifM2NLCIGL +j1oZr5KZxsWipBb5HP27A/QqHpjyssEgaQ6W6j7ctZFAH6pRpqQJBi/ZvrDjTtQn +LLN0spAICdbLek/w3UOZ7yIklATAcEi62MRPZIm/eqN0J9Yfp6sEIOaZyI8vFJkC +0evOKw+6XrSAInvvPAqQpJd7TBlf1F7XITI/PgWKZwHZOfV+OafPZMFK17XC9KLA +pO+fJZaWlbu8RCd/691DtChKcPYhgw9Zy5hpV4/KqJMCAwEAAaNmMGQwHQYDVR0O +BBYEFBT62nf4RZK3fDj8dMomdCu31DZ1MB8GA1UdIwQYMBaAFBoDwK1cPf52OPwg +jLJzXKNEHQ/sMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMA0G +CSqGSIb3DQEBCwUAA4IBAQAA95Khfss49mIo/IbqfWQqDj2V6YbRAClCX5cnYDEz +a7FAntAg/cmhGSFBkW3Ql68Kn+lVuP5mIMZCMZuOCI7qy4YX6RJJQ94DdKIZd35P +7/Y8ftPtR/0km9XMKUrPMNlAvHPZ1l/xdUj4AAYso4TwnQxRFEDQnUt8eSCTuS8p +9jmuNk8IRWVD905diITa/UajFC7LufqAtKa/23KRDQWlgvb5bIGLK9kTXM3V2ksx +XvBNmqcuy3Nufgd8SsyaEvDLhjRQc8YsQCNz7X/1yWGOhYs3/DMgr/1tSsw/YCJ7 +78ScUdbz3nwGQKhP6jgHtd9PsFYir1A9a+tGQnuhOxvf +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDjTCCAnWgAwIBAgIUKMfxjtTv4pQhDgO7XhYH2psGmw4wDQYJKoZIhvcNAQEL +BQAwVjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNV +BAcMBkJvc3RvbjENMAsGA1UECgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0 +MTEyNzIwNTExOVoXDTM0MTEyNTIwNTExOVowVjELMAkGA1UEBhMCVVMxFjAUBgNV +BAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UECgwEUm9v +dDEPMA0GA1UEAwwGY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAyLov3+OByx5stGOVpSdFT7/9jjCvocEHWVRMTFdWQLDUTKjS7FypFNzAuXUC +ydO7I5sgvITy9Awg/vRTafuCVP0WtFdO1Jphw4Q3go+uNRVGAhBHV5SegPqkv0u6 +Cb2kZzW88klhyRS8x/41xwJeSXmFHva0VsAy9b0K7UFTDtCKBT+Rb6TRcuYeFI7p +2fr9OUACg+OtwvYFgKptS+NhwQeq3EIx7SVOHQg3FO2DJlr1EX+k4ItTYX7qLn6R +ebrsZX1SitJ5BMmLCOOoj6NSziqEo4HFeU0A9fXmPJ3QAx1zuef8qah4wYk+cuxr +QKVMPRqUvtzgYM7SL/A3Qh6cKwIDAQABo1MwUTAdBgNVHQ4EFgQUGgPArVw9/nY4 +/CCMsnNco0QdD+wwHwYDVR0jBBgwFoAUGgPArVw9/nY4/CCMsnNco0QdD+wwDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAhIf5Q6P83PBOUN3XFSK7 +uZJPOEBkixcbzS6pBZ/9YYGSNfB2dtO1NEiTDkdDC2YwP4wf1hCDiIvIn9Um+PzV +jYQjIDMK4oOFmigpbFbjyPHDYHLHmWLFtHA9V2ISE1O8TGxw7wQSpqBKoibAuaT6 +Balg5J7Rhs1em6SEmfEvgOzuVWU9g1nOlmJqTwshPQeq+uPZOzjaC5ofiq7Wr8rj ++GDuZE2HBN/sL8Ojxx9N0vfMctw3Xl26x3j9paH8PgKBp72wplIa3i8r7zfX999P +SwvOIqwTtQu3nED2hwz/EjNPGhFlXdUiM3sSvxgGY8PeyR5M6dxQggVxMxUa++Nx +bQ== +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/ica-private-key.pem b/src/tests/client_server/data/ica-private-key.pem new file mode 100644 index 00000000..d1066aee --- /dev/null +++ b/src/tests/client_server/data/ica-private-key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQQG6NQCpC9z6zVuH2J +OMZ4zwICCAAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEDtjScSlInWJLzgO +I26tLt0EggTQzMsJQwKJH/wHs+R66zgDh6kSXY5hvrxxpK/5GWBT7fALIchkeEzR +YSyp7uqrcii9ljL8hx4g1VojSPpRRGx7WjTWMxVQu1xmdOqR76ptCy23i93NjLrQ +7gvhAkNH7SKPYFOZfUHgBIFEHYDjzqK50Moac6OAdWAGQXQkN0vJ3Xg6MDhzdxuW +AXREqeLLC2UJ60FYdEVkohp2+F1DafHMj3Tqo4mZAvZFRJc2DJ48GroTaAb3tZSr +nWgWeJe4YG4gbrDcyBZQEoWJP4QwDSpEr4VBXDFKWS85m+vqhiTqRYBCQJLJbkfb +XV6nXxwT8X8AcE5nSb/ofRcw0hLRjYmJyAo2fdkVg92iyy2jCDxBgEeS8oanOrFL +oZol1LzKwHycQPYroyNelpGFq950PKsQo2kxehHlEPWQe8ViUkxlwlbM95v5Y76J ++IwfSBWc39N5MHu8w1TJVmg7LA0V8Akfi+sblXq8OaypAxkUiVeyW7UH6azKQzLk +o75A/iisscMJvA7F5PsfMU3iqlch8gRKwqFig9yVPE5OwB+M365DJM+VZyuKcNCb +Gu7vW05M+HvdSM3osqEToBUrzhFcy+T3xOybWFMMG4oPXkYTOx4VgxQQSa5g34ec +MvFLyMu2KRWohXO3+jPiYvMZWeWYVPvOetAEQpWIAVNav41TcIenMF14PlwvKPm5 +7NnynduUmQIgaQE3NmwAXrb5yLIoVHvmKaAvAXykL1Uc0etLexHTxup/RLO4WLJS +d44zTjvXna+aQ8boutP4DvUKXLsvtgaEIAtOgMVOq/rrrfL/lAPl/JFAZvWwc2gS +2Y4qCWNjmqRyF8eFS3n603zzjju7iTEpghOxdO01DVg0IezEG9+LQz89VmI3hMPQ +unOmtooFkfH3b5+E96X8megWaTk5pCi1/q+uoI1urTbvEf3oOsja3UA/yRGLG1LI +hbc4jasGAb/7j7q9LWcGNPSZPzdnQk2zt7rPBbwyZIrdgwyRAmffC1zD/C7KsqKV +1SlEmg4mFNwD2QeW+5MImfESTKZw5lEn7HNZUFBBXd0padM8EN4x9EpRebV2gVo7 +MUt8tcX/Nam9LSilxoQ8AlyoBjvs+lj2ZBgRMwva82iYNYQ2FuzIaptInCNrmx4b ++lP4mT/65TeMO1dyeeud+qqwJN64+BOHWAODA4cmwTtvNA4LDQuH8Uf+mnFqvHCd +xBd1rVPFM3MG9M1Boq7XDMsi01oEaiw7vu97VCINZvTspbOwoo351sVXrpEcadwo +9DAizyge4df4WI9uWTorycoyYMkaZKA9DoNUBikl1F7bX+yy45wFpY5yOwvsi9jd +EHSGcyxtgCszR3sK33Ozxgsr1EXWOCZCaAFVcwhR1dNogqdgDFnuCHsilGCANlIz +piDjBrHaYb4BI33FCUlYgwr6WHnF+utVDBMUQZ6Pj+vYjtKEwLCo+XyebvGHSeNi +D40MP9q9xHyu5cshd06cV88O8zE4Ys8HRPVJcC2qQJPS903D0uxP04NRoBZbXCAc +SyDm4MVsz2ovMJ9KIn+Nz7gDP2XCOFLqi1xPBhn5pI5BV303i8PKVnu9b+lw0Tai +lS8lYFV/LQmFU8H1dd6LuEKB7jQxqzRxP1Dc2KaaEQUENSk4PEmPiXw= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/src/tests/client_server/data/ica-signed-cert.pem b/src/tests/client_server/data/ica-signed-cert.pem new file mode 100644 index 00000000..bbf75fce --- /dev/null +++ b/src/tests/client_server/data/ica-signed-cert.pem @@ -0,0 +1,80 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=US, ST=Massachusetts, L=Boston, O=Root, CN=ca.gnu + Validity + Not Before: Nov 27 20:51:19 2024 GMT + Not After : Nov 27 20:51:19 2025 GMT + Subject: C=US, ST=Massachusetts, O=ICA, CN=ica.gnu + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:d5:1f:d7:1a:46:9a:70:ed:6a:88:af:be:80:04: + 42:32:26:cf:c4:d8:11:05:21:3f:b3:ef:29:d9:a3: + 39:37:b7:89:d5:64:9a:cc:c1:f4:9c:0a:8b:41:cb: + 09:7e:ab:16:62:24:6b:69:ea:ba:78:a2:97:a3:e4: + 0a:06:c2:2e:14:31:20:15:61:74:7d:70:5d:e8:9f: + 33:63:4b:08:81:8b:8f:5a:19:af:92:99:c6:c5:a2: + a4:16:f9:1c:fd:bb:03:f4:2a:1e:98:f2:b2:c1:20: + 69:0e:96:ea:3e:dc:b5:91:40:1f:aa:51:a6:a4:09: + 06:2f:d9:be:b0:e3:4e:d4:27:2c:b3:74:b2:90:08: + 09:d6:cb:7a:4f:f0:dd:43:99:ef:22:24:94:04:c0: + 70:48:ba:d8:c4:4f:64:89:bf:7a:a3:74:27:d6:1f: + a7:ab:04:20:e6:99:c8:8f:2f:14:99:02:d1:eb:ce: + 2b:0f:ba:5e:b4:80:22:7b:ef:3c:0a:90:a4:97:7b: + 4c:19:5f:d4:5e:d7:21:32:3f:3e:05:8a:67:01:d9: + 39:f5:7e:39:a7:cf:64:c1:4a:d7:b5:c2:f4:a2:c0: + a4:ef:9f:25:96:96:95:bb:bc:44:27:7f:eb:dd:43: + b4:28:4a:70:f6:21:83:0f:59:cb:98:69:57:8f:ca: + a8:93 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 14:FA:DA:77:F8:45:92:B7:7C:38:FC:74:CA:26:74:2B:B7:D4:36:75 + X509v3 Authority Key Identifier: + 1A:03:C0:AD:5C:3D:FE:76:38:FC:20:8C:B2:73:5C:A3:44:1D:0F:EC + X509v3 Basic Constraints: critical + CA:TRUE, pathlen:0 + X509v3 Key Usage: critical + Digital Signature, Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + Signature Value: + 00:f7:92:a1:7e:cb:38:f6:62:28:fc:86:ea:7d:64:2a:0e:3d: + 95:e9:86:d1:00:29:42:5f:97:27:60:31:33:6b:b1:40:9e:d0: + 20:fd:c9:a1:19:21:41:91:6d:d0:97:af:0a:9f:e9:55:b8:fe: + 66:20:c6:42:31:9b:8e:08:8e:ea:cb:86:17:e9:12:49:43:de: + 03:74:a2:19:77:7e:4f:ef:f6:3c:7e:d3:ed:47:fd:24:9b:d5: + cc:29:4a:cf:30:d9:40:bc:73:d9:d6:5f:f1:75:48:f8:00:06: + 2c:a3:84:f0:9d:0c:51:14:40:d0:9d:4b:7c:79:20:93:b9:2f: + 29:f6:39:ae:36:4f:08:45:65:43:f7:4e:5d:88:84:da:fd:46: + a3:14:2e:cb:b9:fa:80:b4:a6:bf:db:72:91:0d:05:a5:82:f6: + f9:6c:81:8b:2b:d9:13:5c:cd:d5:da:4b:31:5e:f0:4d:9a:a7: + 2e:cb:73:6e:7e:07:7c:4a:cc:9a:12:f0:cb:86:34:50:73:c6: + 2c:40:23:73:ed:7f:f5:c9:61:8e:85:8b:37:fc:33:20:af:fd: + 6d:4a:cc:3f:60:22:7b:ef:c4:9c:51:d6:f3:de:7c:06:40:a8: + 4f:ea:38:07:b5:df:4f:b0:56:22:af:50:3d:6b:eb:46:42:7b: + a1:3b:1b:df +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +FjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UE +CgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0MTEyNzIwNTExOVoXDTI1MTEy +NzIwNTExOVowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMx +DDAKBgNVBAoMA0lDQTEQMA4GA1UEAwwHaWNhLmdudTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANUf1xpGmnDtaoivvoAEQjImz8TYEQUhP7PvKdmjOTe3 +idVkmszB9JwKi0HLCX6rFmIka2nquniil6PkCgbCLhQxIBVhdH1wXeifM2NLCIGL +j1oZr5KZxsWipBb5HP27A/QqHpjyssEgaQ6W6j7ctZFAH6pRpqQJBi/ZvrDjTtQn +LLN0spAICdbLek/w3UOZ7yIklATAcEi62MRPZIm/eqN0J9Yfp6sEIOaZyI8vFJkC +0evOKw+6XrSAInvvPAqQpJd7TBlf1F7XITI/PgWKZwHZOfV+OafPZMFK17XC9KLA +pO+fJZaWlbu8RCd/691DtChKcPYhgw9Zy5hpV4/KqJMCAwEAAaNmMGQwHQYDVR0O +BBYEFBT62nf4RZK3fDj8dMomdCu31DZ1MB8GA1UdIwQYMBaAFBoDwK1cPf52OPwg +jLJzXKNEHQ/sMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMA0G +CSqGSIb3DQEBCwUAA4IBAQAA95Khfss49mIo/IbqfWQqDj2V6YbRAClCX5cnYDEz +a7FAntAg/cmhGSFBkW3Ql68Kn+lVuP5mIMZCMZuOCI7qy4YX6RJJQ94DdKIZd35P +7/Y8ftPtR/0km9XMKUrPMNlAvHPZ1l/xdUj4AAYso4TwnQxRFEDQnUt8eSCTuS8p +9jmuNk8IRWVD905diITa/UajFC7LufqAtKa/23KRDQWlgvb5bIGLK9kTXM3V2ksx +XvBNmqcuy3Nufgd8SsyaEvDLhjRQc8YsQCNz7X/1yWGOhYs3/DMgr/1tSsw/YCJ7 +78ScUdbz3nwGQKhP6jgHtd9PsFYir1A9a+tGQnuhOxvf +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/rca-private-key.pem b/src/tests/client_server/data/rca-private-key.pem new file mode 100644 index 00000000..f89f25ac --- /dev/null +++ b/src/tests/client_server/data/rca-private-key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQJ1VSHi+akaaVYO3O +H7I0EAICCAAwDAYIKoZIhvcNAgkFADAUBggqhkiG9w0DBwQIZlNzQR1bh4IEggTI +8U86bfGmyAXXSi/R/l3G8ziZFyHrRE5Q/Q3uUW/jyUpe+S0gMRPqwW3V542ForbH +IH/Aa+KVxlwmsq0jlheCQewj9qZMQGuqa3iTl/OfCcuGMfsuQs2HsutoDMdEYuBI +6yOqNIrRvSHunZILLDpKz/AmCO6JnRiAwiSqPBixE5M+cm1qc7dy024REiW9l9K6 +Hth9A0iYc94CUyUfHFj4CEkCNqk533Z2Ktkk3RQJnx5ORQG0iBJvoFiVODFKnoAk +Ge2HNrJH3bVvhQ+p8A/L4VmnWUCfcTyqgzo887WXRxORya6gcWWtrcEJGUbLh8sL +/mXFYj/0kEllIY+fHOmSx94I3GwBkQKER/CeOCIp+C392Pujgzrz23pdq20uIt3d +FCgbnIB+5IwOwQcqCkTYa1+Y5qCa6eFLgd8PXGTDyFwP4BHfG6WT/ctHQFi8vnXV +D1S726do1mA6CFE3DYmi45sf+Te2Xb346xk1GTSWtxGh9y4FblFDAWva4oTuvxPR +IDseBhXBsIqnOy1gb/5cGj0SIOQzqR1qlg4igv3UZFC8cVl+fNnngDBiX+nTYQVm +rDyxTzcX9txPSNpLyYRdNHwLGpzZAMoN46bUFnxt0cvRWN6MA7j1r0TYWBZKJ7b7 +Yt/SuYsqSE0UJQEJz4QcQnlxu3qu4HJl7dOlto3fa42MWTkOcNr9XinHmKCZ9oYZ +PYNTggRGMXlqm66KmHWDqXqw9CeufprHq15SIJJR8v4SlvEZr+YlYQeHRI4E+FDA +mEFZy/U3ZL7ZHSDsEvpeBzIJkWxHobt57BIxYHE8KN0ZIz/mJZTxljacblFWnJRb +AUXTfrRZn3lGX+4WA6Biilwyxb71slCKaiz28C55Hnj1UwoUF8vNA3G2FGAX5Wk0 +m3J2SoCHtJQYc/3lEC7zR9i3/F/7vgRxZMUWt/y6KRYq8ZnoQl3Eo2yvJYX/z7I6 +JyqexAx3OvA+frN3rbO/o/k6w9333Smi0QxZzDM9tHn1BAgAtmyC1lizzKn7hDYK +o/eaPeatILbS0a/bHJBbP/R53keVr0hJ3MWK2nb/DV5Dl9j4Z6sHpo3P9L+Kq06y +G9q7NhBd7cxGq4AkCp+eSjqTvwgOX1PtAry00TUmzisLz8gIYutwJqbfZGL8WpR/ +/wnLQXuM/tPLdQNy+PZeTQnPFwWQeZz4VgkMRhHV2xDw0mpzE+cdD204+YjHVdMH +D4MNrDlUmKM0OVoYgXd9YyLKzYVgW95GvY1X0SxTlIUuDiRv/SqRsurPFkSG457d +zmTUny1NRsnbv9bTXqt1Xewqsylyu02N1dZvjIzBnYMVYXl0r4aej1VNEXozQtWO +YRfWaZ29dXwZqUzd83ETQvhI4mZbwAlHbqm/CoyY6Vw4Am8hGa7II134lz2b3tkr +F1zBkvzzl6+HXewGOEjm+YorDMtfADiU/hkkykWq01NG3QSwk7jaKieb5Rlou53d +IXJQBw0KW5UrgbIFqMjpSZz1jdALBKsV+dw0wvCQ8BVXZm3zZpsV+0E4Z0sdj3TI +UbkFqQ6GpoxB25UUUlLZhBbtKy7dheuPBk0HowitYlo1kLVA/JiFB4qbdf5X/9Tm +XRkN+T0orEgy7rBQa7dJN9bdLj+dS5q8 +-----END ENCRYPTED PRIVATE KEY----- diff --git a/src/tests/client_server/data/rca-signed-cert.pem b/src/tests/client_server/data/rca-signed-cert.pem new file mode 100644 index 00000000..a556dffe --- /dev/null +++ b/src/tests/client_server/data/rca-signed-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDjTCCAnWgAwIBAgIUKkxAx2lVnvYcaNqBpJmTgXh1/VgwDQYJKoZIhvcNAQEL +BQAwVjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNV +BAcMBkJvc3RvbjENMAsGA1UECgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0 +MTEyOTEyNDUyOFoXDTM0MTEyNzEyNDUyOFowVjELMAkGA1UEBhMCVVMxFjAUBgNV +BAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UECgwEUm9v +dDEPMA0GA1UEAwwGY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA23YSrcGIBgZf9bbzTnmYFy+4tM82kUhsVFKxWCNEMdKmhaeVvXogyd6Evq4P +NvBGdUABDtHp4pSEijrxWbn8sxddTznoT/8IOuHI0/PtwXYP/sHQ/HzekEUVKN2Z +NMbMUzQfaJyiIV5TrZlaBwHjQ+sRs8E56C3cQjkwuyjll2zDsEfmEnPimZRAL3kb +wW8VFfBcR2Id+a9xKjwlnB4eXQFAgYINoRgCtUOUxSeFgNnwkOUSqDknO6Xi47YZ +EdLlHyUnv5eX547xUkrYhfQuQwaqpGrjHf3GFoysN8P9kd2f1qsJKtQcUbF9DDeZ +6ya47X/LBO8QflMsVjb1V3oz9QIDAQABo1MwUTAdBgNVHQ4EFgQUsvdZoX3RxdN6 +wrONr31SOA9Qbc4wHwYDVR0jBBgwFoAUsvdZoX3RxdN6wrONr31SOA9Qbc4wDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAS3PyV7crGk9brqU90aML +2TWkjgzFb3/nASnpvVYiqyiV4neGiEjtDy7eVlqP6GlD2pYcVodY+ly9wNlo85/h +YfgCFFl37tMG7PpRac2qBqaSn1DpwsCb08LjRrOvoaRffWUikSoZmsYDlaCgl9nT +pGtIrz0BSoyu5mHalIZTVQOrbkNBNK6ZgnYy2iWuiLa5Z1xzKpsRBRaKJc1pcQE/ +QVbPdCiyGQMPEVn/KHxitlycFoee/fA+izXVdstVwfig2DoMvrlGZvEkN1ER3Yz4 +QPJ6HzOsBQL1F+YhnMCQfc2rpcwxAWf8JMy6jsCq42KGq53tkWqHyQ6Zu2SiLRYk +CA== +-----END CERTIFICATE----- diff --git a/src/tests/client_server/data/rca-unsigned-cert.pem b/src/tests/client_server/data/rca-unsigned-cert.pem new file mode 100644 index 00000000..6ffa59d2 --- /dev/null +++ b/src/tests/client_server/data/rca-unsigned-cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDjTCCAnWgAwIBAgIUQ8fTQSauZKYRtUl+c6qD0vNnP+kwDQYJKoZIhvcNAQEL +BQAwVjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1c2V0dHMxDzANBgNV +BAcMBkJvc3RvbjENMAsGA1UECgwEUm9vdDEPMA0GA1UEAwwGY2EuZ251MB4XDTI0 +MTEyNzIwNDkxN1oXDTM0MTEyNTIwNDkxN1owVjELMAkGA1UEBhMCVVMxFjAUBgNV +BAgMDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcMBkJvc3RvbjENMAsGA1UECgwEUm9v +dDEPMA0GA1UEAwwGY2EuZ251MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAub/XkUgCMwKRDTaKfv8xrIYPC3eMOq4C2P5ATxBTgpgz0pSTeqTztS5RPCCs +eUGr109QSUweapLsVjP2mOR0r1VIaePDbxCIHpQzwDaPco5/QRCyInpjJuAXKuJH +deWAiiMUSg+llgPfMZqLAIsDf9zDBhK1/UOGblkGqPX7qMqkiR4Ti05+59Zpl7Ht +UFi0Y7psTiRsnrf33wfFJ8MVWlEluonaVUXdHUVRPyb5ubpbGhouA8mDl0+Y4WyA +NDpx+LDo7xJsfx6vMTsvUYxYtE/FHO4ezCl37VZo1t4CDPUiYeVBRKhkqwhGslzl +hqJniO/uw7OCzjnNSm/lReugsQIDAQABo1MwUTAdBgNVHQ4EFgQUjS1b20tXuB4J +XMvKEi4VUCTcQM8wHwYDVR0jBBgwFoAUjS1b20tXuB4JXMvKEi4VUCTcQM8wDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAN9gRx8fina3ZHgjEnIlj +wEAR20zqennDhJxG6unuE+uoKZe4whnlsEFgDdulU8hXlWn3PcWNwE21JGo8ePKW +2wvKY0Oj24cDXU+/ZQDbBASWY0GdiFs8z3kGBFn0V3OfjSDRYdypBTSwU23X7mKD +tDjBMgGUc1MaIWf3bXFA+zzumPP0IJ+XeXURwbxfi4bgFHmttSjfkle0srUEZ1do +w0DDM5ptFkLllfArw8PuAmK79iVkoVZSE76sDc1/FRaLdBtOExd5UCosFrgP1WR5 +ZqPXlqGbIom1GBCLh19V5v/KP3594yPMGiaRE/fp9155mMbF9vnphTISy9pkMCgz +uw== +-----END CERTIFICATE----- diff --git a/src/tests/client_server/libtest.c b/src/tests/client_server/libtest.c index ac028294..5d2e1e1d 100644 --- a/src/tests/client_server/libtest.c +++ b/src/tests/client_server/libtest.c @@ -29,6 +29,7 @@ #include #include #include +#include /** * A semaphore. @@ -419,6 +420,7 @@ cleanup: &res)); if (! cctxs[i].status) ret = false; + curl_slist_free_all (cctxs[i].pc.hosts); } test_check (0 == close (p[0])); test_check (0 == close (p[1])); @@ -481,7 +483,7 @@ MHDT_test (MHDT_ServerSetup ss_cb, void *ss_cb_cls, MHDT_ServerRunner run_cb, void *run_cb_cls, - const struct MHDT_Phase *phases) + struct MHDT_Phase *phases) { struct ServerContext ctx = { .run_cb = run_cb, @@ -574,17 +576,23 @@ MHDT_test (MHDT_ServerSetup ss_cb, } for (i = 0; NULL != phases[i].label; i++) { + struct MHDT_Phase *pi = &phases[i]; + struct MHDT_PhaseContext *pc + = pi->use_tls + ? &pc_https + : &pc_http; + pc->phase = &phases[i]; + pc->hosts = NULL; fprintf (stderr, "Running test phase '%s'\n", - phases[i].label); - if (! run_client_phase (&phases[i], - phases[i].use_tls - ? &pc_https - : &pc_http)) + pi->label); + if (! run_client_phase (pi, + pc)) { res = 1; goto cleanup; } + pc->hosts = NULL; /* client is done with phase */ semaphore_up (&ctx.client_sem); /* wait for server to have moved to new phase */ @@ -622,3 +630,63 @@ cleanup: test_check (0 == close (p[1])); return res; } + + +char * +MHDT_load_pem (const char *name) +{ + char path[256]; + int fd; + struct stat s; + char *buf; + + snprintf (path, + sizeof (path), + "data/%s.pem", + name); + fd = open (path, + O_RDONLY); + if (-1 == fd) + { + fprintf (stderr, + "Failed to open %s: %s\n", + path, + strerror (errno)); + return NULL; + } + if (0 != + fstat (fd, + &s)) + { + fprintf (stderr, + "Failed to fstat %s: %s\n", + path, + strerror (errno)); + (void) close (fd); + return NULL; + } + buf = malloc (s.st_size + 1); + if (NULL == buf) + { + fprintf (stderr, + "Failed to malloc(): %s\n", + strerror (errno)); + (void) close (fd); + return NULL; + } + if (-1 == + read (fd, + buf, + s.st_size)) + { + fprintf (stderr, + "Failed to read %s: %s\n", + path, + strerror (errno)); + free (buf); + (void) close (fd); + return NULL; + } + (void) close (fd); + return buf; +} diff --git a/src/tests/client_server/libtest.h b/src/tests/client_server/libtest.h index a51abfcf..add22545 100644 --- a/src/tests/client_server/libtest.h +++ b/src/tests/client_server/libtest.h @@ -35,6 +35,14 @@ #endif #include "microhttpd2.h" + +/** + * A phase defines some server and client-side + * behaviors to execute. + */ +struct MHDT_Phase; + + /** * Information about the current phase. */ @@ -45,10 +53,22 @@ struct MHDT_PhaseContext */ const char *base_url; + /** + * Data structure to keep around during the request because + * Curl. + */ + struct curl_slist *hosts; + /** * Specific client we are running. */ unsigned int client_id; + + /** + * More details about the phase we are running. + */ + struct MHDT_Phase *phase; + }; @@ -62,7 +82,102 @@ struct MHDT_PhaseContext */ typedef const char * (*MHDT_ClientLogic)(const void *cls, - const struct MHDT_PhaseContext *pc); + struct MHDT_PhaseContext *pc); + + +struct MHDT_Phase +{ + + /** + * Name of the phase, for debugging/logging. + */ + const char *label; + + /** + * Logic for the MHD server for this phase. + */ + MHD_RequestCallback server_cb; + + /** + * Closure for @e server_cb. + */ + void *server_cb_cls; + + /** + * Logic for the CURL client for this phase. + */ + MHDT_ClientLogic client_cb; + + /** + * Closure for @e client_cb. + */ + const void *client_cb_cls; + + /** + * How long is the phase allowed to run at most before + * timing out. 0 for no timeout. + */ + unsigned int timeout_ms; + + /** + * How many clients should be run in parallel. + * 0 to run just one client. + */ + unsigned int num_clients; + + /** + * Set to true if clients should setup the connection to use TLS. + */ + bool use_tls; + + /** + * Set to true if clients should check server cert. + */ + bool check_server_cert; + + /** + * Client certificate to present to the server, NULL for none. + */ + const char *client_cert; + + /** + * Client private key to use, NULL for none. + */ + const char *client_priv; + + /** + * Server certificate to present to the client, NULL for default. + */ + const char *server_cert; + + /** + * Server private key to use, NULL for default. + */ + const char *server_priv; +}; + + +/** + * Load PEM file from data/ folder and return data in it. + * + * @param name name of PEM file to load + * @return NULL on error + */ +char * +MHDT_load_pem (const char *name); + + +/** + * Run request against the root URL of the + * hostname given in @a cls. + * + * @param cls closure with hostname to use + * @param pc context for the client + * @return error message, NULL on success + */ +const char * +MHDT_client_get_host (const void *cls, + struct MHDT_PhaseContext *pc); /** @@ -75,7 +190,7 @@ typedef const char * */ const char * MHDT_client_get_root (const void *cls, - const struct MHDT_PhaseContext *pc); + struct MHDT_PhaseContext *pc); /** @@ -90,7 +205,7 @@ MHDT_client_get_root (const void *cls, */ const char * MHDT_client_get_with_query (const void *cls, - const struct MHDT_PhaseContext *pc); + struct MHDT_PhaseContext *pc); /** @@ -104,7 +219,7 @@ MHDT_client_get_with_query (const void *cls, */ const char * MHDT_client_set_header (const void *cls, - const struct MHDT_PhaseContext *pc); + struct MHDT_PhaseContext *pc); /** @@ -119,7 +234,7 @@ MHDT_client_set_header (const void *cls, */ const char * MHDT_client_expect_header (const void *cls, - const struct MHDT_PhaseContext *pc); + struct MHDT_PhaseContext *pc); /** @@ -132,7 +247,7 @@ MHDT_client_expect_header (const void *cls, */ const char * MHDT_client_put_data (const void *cls, - const struct MHDT_PhaseContext *pc); + struct MHDT_PhaseContext *pc); /** @@ -145,7 +260,7 @@ MHDT_client_put_data (const void *cls, */ const char * MHDT_client_chunk_data (const void *cls, - const struct MHDT_PhaseContext *pc); + struct MHDT_PhaseContext *pc); /** @@ -257,58 +372,7 @@ struct MHDT_PostInstructions const char * MHDT_client_do_post ( const void *cls, - const struct MHDT_PhaseContext *pc); - - -/** - * A phase defines some server and client-side - * behaviors to execute. - */ -struct MHDT_Phase -{ - - /** - * Name of the phase, for debugging/logging. - */ - const char *label; - - /** - * Logic for the MHD server for this phase. - */ - MHD_RequestCallback server_cb; - - /** - * Closure for @e server_cb. - */ - void *server_cb_cls; - - /** - * Logic for the CURL client for this phase. - */ - MHDT_ClientLogic client_cb; - - /** - * Closure for @e client_cb. - */ - const void *client_cb_cls; - - /** - * How long is the phase allowed to run at most before - * timing out. 0 for no timeout. - */ - unsigned int timeout_ms; - - /** - * How many clients should be run in parallel. - * 0 to run just one client. - */ - unsigned int num_clients; - - /** - * Set to true if clients should setup the connection to use TLS. - */ - bool use_tls; -}; + struct MHDT_PhaseContext *pc); /** @@ -650,6 +714,6 @@ MHDT_test (MHDT_ServerSetup ss_cb, void *ss_cb_cls, MHDT_ServerRunner run_cb, void *run_cb_cls, - const struct MHDT_Phase *phases); + struct MHDT_Phase *phases); #endif diff --git a/src/tests/client_server/libtest_convenience_client_request.c b/src/tests/client_server/libtest_convenience_client_request.c index 43e492ac..488ff362 100644 --- a/src/tests/client_server/libtest_convenience_client_request.c +++ b/src/tests/client_server/libtest_convenience_client_request.c @@ -231,11 +231,13 @@ check_status (CURL *c, * * @param[in,out] c curl handle to manipulate * @param base_url base URL to set - * @return true on success, false on failure (@a c will be cleaned up in this case) + * @param[in,out] pc phase context with further options + * @return NULL on success, error message on failure (@a c will be cleaned up in this case) */ -static bool +static const char * set_url (CURL *c, - const char *base_url) + const char *base_url, + struct MHDT_PhaseContext *pc) { if (CURLE_OK != curl_easy_setopt (c, @@ -243,7 +245,7 @@ set_url (CURL *c, base_url)) { curl_easy_cleanup (c); - return false; + return "Failed to set URL"; } if (CURLE_OK != curl_easy_setopt (c, @@ -251,48 +253,152 @@ set_url (CURL *c, 1)) { curl_easy_cleanup (c); - return false; + return "Failed to set verbosity"; + } + { + /* Force curl to do the request to 127.0.0.1 regardless of + hostname */ + const char *host; + const char *end; + char ri[1024]; + + if (0 == strncasecmp (base_url, + "https://", + strlen ("https://"))) + host = &base_url[strlen ("https://")]; + else + host = &base_url[strlen ("http://")]; + end = strchr (host, '/'); + if (NULL == end) + end = host + strlen (host); + snprintf (ri, + sizeof (ri), + "%.*s:127.0.0.1", + (int) (end - host), + host); + pc->hosts = curl_slist_append (NULL, + ri); + if (CURLE_OK != + curl_easy_setopt (c, + CURLOPT_RESOLVE, + pc->hosts)) + { + curl_easy_cleanup (c); + return "Failed to override DNS"; + } } if (0 == strncasecmp (base_url, "https://", strlen ("https://"))) { - /* disable certificate checking */ - if ( (CURLE_OK != - curl_easy_setopt (c, - CURLOPT_SSL_VERIFYPEER, - 0L)) || - (CURLE_OK != - curl_easy_setopt (c, - CURLOPT_SSL_VERIFYHOST, - 0L)) ) + struct MHDT_Phase *phase = pc->phase; + + if (phase->check_server_cert) { - curl_easy_cleanup (c); - return false; + if (CURLE_OK != + curl_easy_setopt (c, + CURLOPT_CAINFO, + "data/rca-signed-cert.pem")) + { + curl_easy_cleanup (c); + return "Failed to override root CA"; + } + } + else + { + /* disable certificate checking */ + if ( (CURLE_OK != + curl_easy_setopt (c, + CURLOPT_SSL_VERIFYPEER, + 0L)) || + (CURLE_OK != + curl_easy_setopt (c, + CURLOPT_SSL_VERIFYHOST, + 0L)) ) + { + curl_easy_cleanup (c); + return "Failed to disable X509 server certificate checks"; + } + } + if (NULL != phase->client_cert) + { + if (CURLE_OK != + curl_easy_setopt (c, + CURLOPT_SSLCERT, + phase->client_cert)) + { + curl_easy_cleanup (c); + return "Failed to set client certificate"; + } } } - return true; + return NULL; +} + + +const char * +MHDT_client_get_host (const void *cls, + struct MHDT_PhaseContext *pc) +{ + const char *host = cls; + const char *err; + size_t alen = strlen (host); + CURL *c; + size_t blen = strlen (pc->base_url); + char u[alen + blen + 1]; + const char *slash = strchr (pc->base_url, + '/'); + const char *colon; + + if (NULL == slash) + return "'/' missing in base URL"; + colon = strchr (slash, + ':'); + if (NULL == colon) + return "':' missing in base URL"; + snprintf (u, + sizeof (u), + "https://%s%s", + host, + colon); + c = curl_easy_init (); + if (NULL == c) + return "Failed to initialize Curl handle"; + err = set_url (c, + u, + pc); + if (NULL != err) + return err; + PERFORM_REQUEST (c); + CHECK_STATUS (c, + MHD_HTTP_STATUS_OK); + curl_easy_cleanup (c); + return NULL; } const char * MHDT_client_get_root ( const void *cls, - const struct MHDT_PhaseContext *pc) + struct MHDT_PhaseContext *pc) { const char *text = cls; CURL *c; + const char *err; DECLARE_WB (text); c = curl_easy_init (); if (NULL == c) return "Failed to initialize Curl handle"; - if (! set_url (c, - pc->base_url)) - return "Failed to set URL for curl request"; + err = set_url (c, + pc->base_url, + pc); + if (NULL != err) + return err; SETUP_WB (c); PERFORM_REQUEST (c); - CHECK_STATUS (c, MHD_HTTP_STATUS_OK); + CHECK_STATUS (c, + MHD_HTTP_STATUS_OK); curl_easy_cleanup (c); CHECK_WB (text); return NULL; @@ -302,9 +408,10 @@ MHDT_client_get_root ( const char * MHDT_client_get_with_query ( const void *cls, - const struct MHDT_PhaseContext *pc) + struct MHDT_PhaseContext *pc) { const char *args = cls; + const char *err; size_t alen = strlen (args); CURL *c; size_t blen = strlen (pc->base_url); @@ -320,9 +427,11 @@ MHDT_client_get_with_query ( c = curl_easy_init (); if (NULL == c) return "Failed to initialize Curl handle"; - if (! set_url (c, - u)) - return "Failed to set URL for curl request"; + err = set_url (c, + u, + pc); + if (NULL != err) + return err; PERFORM_REQUEST (c); CHECK_STATUS (c, MHD_HTTP_STATUS_NO_CONTENT); @@ -334,9 +443,10 @@ MHDT_client_get_with_query ( const char * MHDT_client_set_header ( const void *cls, - const struct MHDT_PhaseContext *pc) + struct MHDT_PhaseContext *pc) { const char *hdr = cls; + const char *err; CURL *c; CURLcode res; struct curl_slist *slist; @@ -344,9 +454,11 @@ MHDT_client_set_header ( c = curl_easy_init (); if (NULL == c) return "Failed to initialize Curl handle"; - if (! set_url (c, - pc->base_url)) - return "Failed to set URL for curl request"; + err = set_url (c, + pc->base_url, + pc); + if (NULL != err) + return err; slist = curl_slist_append (NULL, hdr); if (CURLE_OK != @@ -374,10 +486,11 @@ MHDT_client_set_header ( const char * MHDT_client_expect_header (const void *cls, - const struct MHDT_PhaseContext *pc) + struct MHDT_PhaseContext *pc) { #ifdef HAVE_LIBCRUL_NEW_HDR_API const char *hdr = cls; + const char *err; size_t hlen = strlen (hdr) + 1; char key[hlen]; const char *colon = strchr (hdr, ':'); @@ -395,9 +508,11 @@ MHDT_client_expect_header (const void *cls, c = curl_easy_init (); if (NULL == c) return "Failed to initialize Curl handle"; - if (! set_url (c, - pc->base_url)) - return "Failed to set URL for curl request"; + err = set_url (c, + pc->base_url, + pc); + if (NULL != err) + return err; PERFORM_REQUEST (c); CHECK_STATUS (c, MHD_HTTP_STATUS_NO_CONTENT); @@ -499,9 +614,10 @@ read_cb (void *ptr, const char * MHDT_client_put_data ( const void *cls, - const struct MHDT_PhaseContext *pc) + struct MHDT_PhaseContext *pc) { const char *text = cls; + const char *err; struct ReadBuffer rb = { .buf = text, .len = strlen (text) @@ -511,9 +627,11 @@ MHDT_client_put_data ( c = curl_easy_init (); if (NULL == c) return "Failed to initialize Curl handle"; - if (! set_url (c, - pc->base_url)) - return "Failed to set URL for curl request"; + err = set_url (c, + pc->base_url, + pc); + if (NULL != err) + return err; if (CURLE_OK != curl_easy_setopt (c, CURLOPT_UPLOAD, @@ -557,9 +675,10 @@ MHDT_client_put_data ( const char * MHDT_client_chunk_data ( const void *cls, - const struct MHDT_PhaseContext *pc) + struct MHDT_PhaseContext *pc) { const char *text = cls; + const char *err; struct ReadBuffer rb = { .buf = text, .len = strlen (text), @@ -570,9 +689,11 @@ MHDT_client_chunk_data ( c = curl_easy_init (); if (NULL == c) return "Failed to initialize Curl handle"; - if (! set_url (c, - pc->base_url)) - return "Failed to set URL for curl request"; + err = set_url (c, + pc->base_url, + pc); + if (NULL != err) + return err; if (CURLE_OK != curl_easy_setopt (c, CURLOPT_UPLOAD, @@ -608,9 +729,10 @@ MHDT_client_chunk_data ( const char * MHDT_client_do_post ( const void *cls, - const struct MHDT_PhaseContext *pc) + struct MHDT_PhaseContext *pc) { const struct MHDT_PostInstructions *pi = cls; + const char *err; CURL *c; struct curl_slist *request_hdr = NULL; @@ -626,9 +748,11 @@ MHDT_client_do_post ( c = curl_easy_init (); if (NULL == c) return "Failed to initialize Curl handle"; - if (! set_url (c, - pc->base_url)) - return "Failed to set URL for curl request"; + err = set_url (c, + pc->base_url, + pc); + if (NULL != err) + return err; if (CURLE_OK != curl_easy_setopt (c, CURLOPT_POST, diff --git a/src/tests/client_server/test_cert_tls.c b/src/tests/client_server/test_cert_tls.c new file mode 100644 index 00000000..c6c2f92c --- /dev/null +++ b/src/tests/client_server/test_cert_tls.c @@ -0,0 +1,144 @@ +/* + This file is part of GNU libmicrohttpd + Copyright (C) 2016, 2024 Christian Grothoff & Evgeny Grin (Karlson2k) + + GNU libmicrohttpd is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + GNU libmicrohttpd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +/** + * @file test_tls.c + * @brief test with client against TLS server + * @author Christian Grothoff + */ +#include "libtest.h" + + +int +main (int argc, char *argv[]) +{ + char *client_of_rca_private_key + = MHDT_load_pem ("client-of-rca-private-key"); + char *client_of_rca_signed_cert + = MHDT_load_pem ("client-of-rca-signed-cert"); + char *client_of_ica_private_key + = MHDT_load_pem ("client-of-ica-private-key"); + char *client_of_ica_signed_cert + = MHDT_load_pem ("client-of-ica-signed-cert"); + char *client_of_ica_chain + = MHDT_load_pem ("client-of-ica-chain"); + struct MHD_DaemonOptionAndValue rca_options[] = { + MHD_D_OPTION_POLL_SYSCALL (MHD_SPS_AUTO), + MHD_D_OPTION_WM_WORKER_THREADS (1), + MHD_D_OPTION_TLS (MHD_TLS_BACKEND_ANY), + MHD_D_OPTION_TLS_CERT_KEY (client_of_rca_signed_cert, + client_of_rca_private_key, + "clientword"), + MHD_D_OPTION_TERMINATE () + }; + struct MHD_DaemonOptionAndValue ica_options[] = { + MHD_D_OPTION_POLL_SYSCALL (MHD_SPS_AUTO), + MHD_D_OPTION_WM_WORKER_THREADS (1), + MHD_D_OPTION_TLS (MHD_TLS_BACKEND_ANY), + MHD_D_OPTION_TLS_CERT_KEY (client_of_ica_chain, + client_of_ica_private_key, + "iclientword"), + MHD_D_OPTION_TERMINATE () + }; + struct ServerType + { + const char *label; + MHDT_ServerSetup server_setup; + void *server_setup_cls; + MHDT_ServerRunner server_runner; + void *server_runner_cls; + struct MHDT_Phase phase; + } configs[] = { + { + .label = "rca_server", + .server_setup = &MHDT_server_setup_minimal, + .server_setup_cls = rca_options, + .server_runner = &MHDT_server_run_minimal, + .phase = { + .label = "simple RCA get", + .server_cb = &MHDT_server_reply_text, + .server_cb_cls = (void *) "Hello world", + .client_cb = &MHDT_client_get_host, + .client_cb_cls = "client.ca.gnu", + .timeout_ms = 2500, + .use_tls = true, + .check_server_cert = true + } + + + }, + { + .label = "ica_server", + .server_setup = &MHDT_server_setup_minimal, + .server_setup_cls = ica_options, + .server_runner = &MHDT_server_run_minimal, + .phase = { + .label = "simple ICA get", + .server_cb = &MHDT_server_reply_text, + .server_cb_cls = (void *) "Hello world", + .client_cb = &MHDT_client_get_host, + .client_cb_cls = "client.ica.gnu", + .timeout_ms = 2500, + .use_tls = true, + .check_server_cert = true + } + + + }, + { + .label = "END" + } + }; + unsigned int i; + int ret = 0; + + (void) argc; /* Unused. Silence compiler warning. */ + (void) argv; /* Unused. Silence compiler warning. */ + + for (i = 0; NULL != configs[i].server_setup; i++) + { + struct ServerType *st = &configs[i]; + struct MHDT_Phase phases[2] = { + st->phase + }; + fprintf (stderr, + "Running TLS tests with server setup '%s'\n", + st->label); + ret = MHDT_test (st->server_setup, + st->server_setup_cls, + st->server_runner, + st->server_runner_cls, + phases); + if (0 != ret) + { + fprintf (stderr, + "Test failed with server of type '%s' (%u)\n", + st->label, + i); + break; + } + } + free (client_of_rca_signed_cert); + free (client_of_rca_private_key); + free (client_of_ica_chain); + free (client_of_ica_signed_cert); + free (client_of_ica_private_key); + return ret; +} diff --git a/src/tests/client_server/test_tls.c b/src/tests/client_server/test_tls.c index 464354ce..f75233e0 100644 --- a/src/tests/client_server/test_tls.c +++ b/src/tests/client_server/test_tls.c @@ -294,14 +294,13 @@ main (int argc, char *argv[]) }, }; unsigned int i; + int ret = 0; (void) argc; /* Unused. Silence compiler warning. */ (void) argv; /* Unused. Silence compiler warning. */ for (i = 0; NULL != configs[i].server_setup; i++) { - int ret; - fprintf (stderr, "Running TLS tests with server setup '%s'\n", configs[i].label); @@ -316,8 +315,8 @@ main (int argc, char *argv[]) "Test failed with server of type '%s' (%u)\n", configs[i].label, i); - return ret; + break; } } - return 0; + return ret; }