Unverified Commit 88b16de7 authored by Kip's avatar Kip Committed by GitHub

Merge pull request #976 from Tachi107/970-unit-test

Add unit test for #970
parents 55727103 8b3e52fc
...@@ -63,6 +63,8 @@ if (PISTACHE_USE_SSL) ...@@ -63,6 +63,8 @@ if (PISTACHE_USE_SSL)
configure_file("certs/server_from_intermediate.crt" "certs/server_from_intermediate.crt" COPYONLY) configure_file("certs/server_from_intermediate.crt" "certs/server_from_intermediate.crt" COPYONLY)
configure_file("certs/server_from_intermediate.key" "certs/server_from_intermediate.key" COPYONLY) configure_file("certs/server_from_intermediate.key" "certs/server_from_intermediate.key" COPYONLY)
configure_file("certs/intermediateCA.crt" "certs/intermediateCA.crt" COPYONLY) configure_file("certs/intermediateCA.crt" "certs/intermediateCA.crt" COPYONLY)
configure_file("certs/server_protected.crt" "certs/server_protected.crt" COPYONLY)
configure_file("certs/server_protected.key" "certs/server_protected.key" COPYONLY)
pistache_test(https_server_test) pistache_test(https_server_test)
endif (PISTACHE_USE_SSL) endif (PISTACHE_USE_SSL)
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIC/jCCAeagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0 MIIC/jCCAeagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0
YWNoZS5pbzAeFw0yMDA1MjYyMDUxMTRaFw0zMDA1MjQyMDUxMTRaMD4xCzAJBgNV YWNoZS5pbzAeFw0yMTA5MTIyMDEyMDdaFw0zMTA5MTAyMDEyMDdaMD4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxDzANBgNVBAMM BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxDzANBgNVBAMM
BmNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKye4EiuDYIo BmNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPXxLU/Hrms
5PBL5cS6BRIv+ndojxoEaw3nuOT27x39ue3WuDTXRUi/70MDRCx2enZ78KluAsY/ KkYl9C/DFjexiecY/iVaZlzBl6unAY7l6OtSUgqW9KYtbxGH75cGaGmxt0l4sc/o
dFBO4Oy41VAx7gWFV3Y+D/8epw1NT4Utz/OBZgVVlrU//OU0g1ePVTIrjsrIasqJ j0yRbvy/Rpuow4i9AWvxjRCQvNhR/jmPqEu+U3j2ZcHjhggACvC3SSsBx3KWEws0
Rkqa+d9GgBugnFnjqcd1Dotyk/YYjuAZt0WuBRLqIgLi346QyDv0XitbcT+x8k4y 63ac/mKKkqUSP7rRSVtOu1AeQ/fHwBuS8I5jwgX2cWnVPaq8r8nubbxAW4wHooA7
yqhDcnOdQO42SlmH7RyAaq2C+0n4rjISGYiIdC5/5Nuqpc9Pzk3asLJkp7s4sVf9 yKexgl9W/14e8dFszTE8CNyGiQPyLyjTfmacq7IfMAuU5DY6+x3x7PXBGH0q4pv7
7umFBSvBRWrM5HIHePzBbrz3hw6MvGWO1GfO+kqFMCUQniRUeXLixlhJp97cO93b onky6yv3SKTmh6ZyaApsMI7yt6+LkDK7vv91LO7e50ItQGbEa6/XnoQCOhfiCgRk
ZsrCoi3jIvcCAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYDVR0l 1Ba2cHayjJECAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYDVR0l
BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAE6MKgUv1yg6Y4OI5lnf BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACcYn+X8wLllWfyPxD8f
xYOxiSgsgfXxZNN9upBga+GfB79d/0NPeEVjm2sHtmGDKBF/2ItmV6WOJu+MJA31 eCvES984cSqaAq5Xzn+PbRdQAglRyvfeIXQLfEwTkBjY0uBMGuZYImj767PJ8raX
pIqSn7g9bo95YdPpIpQjGeefFdZm0+GJ/4QabjxqpLUS0k+znvCYptvvYWa5Zu1Z O6MeHM2ctGy1tpNygeyoECiPGTFCRAREXlhS6Pypfl0mrvFveihcja8C1F82tH/b
tnWes3Jxnm1ZYLoIuruHTvWXILQjuPXG+8s8R9cDjzdThWBpQ//xJVvgqbX0bWXE fgxgaQap6kugkFALIsR2plts41haGLooe3uraf3FGVDlwF7Z8ECEnoDvuo75HyrN
hFEz8AX2KCEDsvXoUutAf9OiBXT1sJ7lq/i+RU/l2N6v6MbKt0ERDyjXYQBZNSxc i8q+q7GzwKwmI7FiKTSpHj/kEA5iBfn+1I1uVwIgPi8rH4qvdakW2PNp9dB6461w
rb2oLsP2g6My2lymVLWUMgms5o6TqAb6r1qaZtkFyWM6UxotsaivczX75ZvFGlzL sw7YYANJqDloEvU6TQgolfnAKXoxBooW1MhTDk7dARQ/11zhIpIKowY49n+GdGcv
W64= Zt8=
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
hpqREA+ap0lyGVtnPsnmFwKBgHaBpnPkrFxiArn9Hi2IXk9HdoW9WMEM+7Mjyt9d XzoQIWudWt8b4gq1HawBaQKBgQCErID/c63HXt1G2tr1maIMKej4uR5Zotiv2B9i
04aN9WV2h0eGchJqBrVaVuG65Q4m1auW9JdiUcW48aqO0hfaVUWiA5nprZisiTL5 RZcNyF6Tx/03ExmFpAa6IkuDNdmIBQhBE18L70SyUFt9hGBC5EwyYmUjO0oZLRlx
3dFXGkF42MRg83ZD3CwpwK5i8IVpI9ACaD+O4DsRDNN34FIcXHE67L6xnlqgx9JG v2WJsqKP0Pk4bLcgQvTxt8/P4jB6hOX1DQVS1FmAATjyAK7Hq5DIHoyx0pDb+Smi
JVbhAoGBAJtPtotdI/JDvYr6skrgWFaaY5YLtVsIREcYzAc/cOFGtTe6YwsF9o/b lED2sQKBgQCrxQknLD5P//MfiHxY10jdZfu5jCnoWqQf/L5NNduTt7tlkBOEwN25
VWTmDLswG54L2fS2gmqgz9oVrfytrk7/2+lkKG0l4izDXUzv4XVpbRj80y5dKyeR CEqJ0cTPZfLY3L+O6SrTNq2UzvzuZCw7ul8/UpyEqga6vfQRzTTkMP4qxiv/3Gd/
NXDb2Uol/I04tZoy5D7a2ce5WVZorGTVZAEzeKn389y5CrXdk4OB 2kShBDStJsh/X9sEIzOB952tk2c7nnAEi6106SOzmKhGQzYYR65F8w==
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0 MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0
YWNoZS5pbzAeFw0yMDA1MjYyMDUxMTRaFw0zMDA1MjQyMDUxMTRaMEYxCzAJBgNV YWNoZS5pbzAeFw0yMTA5MTIyMDEyMDhaFw0zMTA5MTAyMDEyMDhaMEYxCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxFzAVBgNVBAMM BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxFzAVBgNVBAMM
DmludGVybWVkaWF0ZUNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA DmludGVybWVkaWF0ZUNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
0iEC56M/lo5cxAqSIxMvISygNusCndcVigTW1e6iKSJib2ve4/q0egeyUO9uU/dU xtfxC/m85TYzXLEKb26FcAxFwUVBTn4xh6itLCU4c1mo3KtJZNOQWMFHLTqufxiN
ciOILmNOa3zuNJmol0iowS85wyte8E53hH15qk9QpRI6UMhmveUyKfdTbiwlfLO6 +yYBSDTdibxfV/tWH2KwXpgI4A7w9DtpGCUimojUpLXR5qMwJGl+4wz9n0/VvLqI
gMdXPkAsr/vXTP5QUZYDFfujYBtk5CDpfxQR4hPdgA0zud97BiZMm69AunH5A0jx Z3E+xzNdHdtuqisoGOwc7ppYnYuwSOxLPDTU1Z/XADwiHX23H88smUPjRDMnWeBN
eu9AsmYJwVrTFM3EX/j8m8Fg06IeJHaD42Sz942gnglJWvRfS2IJbpnr7sOGvZ/0 dRqnxVE6Ad0brYXKClsHLSK3VWh6+vzoYkLf36A9Oc3uzcI6ca/MP5ej7wxJ2qQx
FIJdqjAV8v3qNcDf6X5436SCLCDZXADIHedP2AGMYLaplEZLC7UaTNm9zIvvYg0X ddTEb4sgxeroJ+he/MPVn+h/pYmRK1K+FpefYVVb2jV6LW+AggjyfWOMfxR9UhtK
dR6VWb+tOSVKU4aNCehyvwIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG B9bAwEOIw+bsW2dngbbpgQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQANF+lALL3xWgXrhJA2RkBziSLFyF3YE/g7kVhZHko+Cxks SIb3DQEBCwUAA4IBAQAXpQABwXwzM84DxfASuuQvR9dSXNIal2wqnB86E2nrKzIj
UzDBZrkn7fbhorTu/j2+QiA/mOGauVNfrgkeZvK1jXvwsE1CmH0e95SczEZVydhm gzn0FcY4OK1N0LYDg5SyFJnakmqwN6ExojuxysnSeI7eu81Yz45VAEXdyumT+rCc
U8nPGYY2Jhq7JuSJSgYOp7ewweAbibHFo8kYVO2aNYfHHcyS9fDVzJ/Ojn7qnIvS g1xbf7AlyXfBYKd+jau8EW5hu6DtMmfnXPnKgZm9kUjaMeTywnbg0nPwq7QBUb/O
JO1aUvWqzdGn0XLPdKj2Jms6NN59/iXgF5I9r5NRMOgA4pUaSe7lUcMT8Oy+PyYE e07QPbW/elf90FQFWFgEYxt0hwG90glqV9v0lpyUeBEmH1C0w4ElP05pYhePvggU
3qKszDIGURdP3Ujzdl6YM3edZJTCieBq6AJwY0CmO6TUJmkpQT0Avx3jyV6lajQH 4XLvuh14nbN6495O9L/wb1p3NYHXuVKlXo9kNnxTgjTpi1BPXQviJBI8sbnfhDRD
6qvKipItp6aUx/Uq9eFrpUvXsFSOsdIS1IS+9qHW XRWxWzWweC1/kJ5X0WIAgRpG8oVymfiU6373CetD
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
...@@ -11,3 +11,5 @@ configure_file(input: 'server_from_intermediate_with_chain.crt', output: 'server ...@@ -11,3 +11,5 @@ configure_file(input: 'server_from_intermediate_with_chain.crt', output: 'server
configure_file(input: 'server_from_intermediate.crt', output: 'server_from_intermediate.crt', copy: true) configure_file(input: 'server_from_intermediate.crt', output: 'server_from_intermediate.crt', copy: true)
configure_file(input: 'server_from_intermediate.key', output: 'server_from_intermediate.key', copy: true) configure_file(input: 'server_from_intermediate.key', output: 'server_from_intermediate.key', copy: true)
configure_file(input: 'intermediateCA.crt', output: 'intermediateCA.crt', copy: true) configure_file(input: 'intermediateCA.crt', output: 'intermediateCA.crt', copy: true)
configure_file(input: 'server_protected.crt', output: 'server_protected.crt', copy: true)
configure_file(input: 'server_protected.key', output: 'server_protected.key', copy: true)
...@@ -83,6 +83,21 @@ openssl x509 -req -in server_from_intermediate.csr -days ${DAYS} -sha256 -extfil ...@@ -83,6 +83,21 @@ openssl x509 -req -in server_from_intermediate.csr -days ${DAYS} -sha256 -extfil
rm -f server_from_intermediate.csr || exit $? rm -f server_from_intermediate.csr || exit $?
log "Create server_protected.key"
openssl genrsa -aes128 -passout pass:test -out server_protected.key ${BITS} || exit $?
log "Create server_protected.csr"
openssl req -new -sha256 -passin pass:test -key server_protected.key \
-subj "/C=US/ST=WA/O=Pistache/CN=server" \
-out server_protected.csr || exit $?
log "Create server_protected.crt"
openssl x509 -req -in server_protected.csr -days ${DAYS} -sha256 -extfile openssl.conf \
-CA rootCA.crt -CAkey rootCA.key -set_serial 01 \
-extensions server -out server_protected.crt || exit $?
rm -f server_protected.csr || exit $?
log "Verify server certificate" log "Verify server certificate"
openssl verify -purpose sslserver -CAfile rootCA.crt server.crt || exit $? openssl verify -purpose sslserver -CAfile rootCA.crt server.crt || exit $?
...@@ -95,6 +110,9 @@ openssl verify -purpose sslserver -partial_chain -CAfile intermediateCA.crt serv ...@@ -95,6 +110,9 @@ openssl verify -purpose sslserver -partial_chain -CAfile intermediateCA.crt serv
log "Verify server_from_intermediate certificate against root using intermediate" log "Verify server_from_intermediate certificate against root using intermediate"
openssl verify -purpose sslserver -untrusted intermediateCA.crt -CAfile rootCA.crt server_from_intermediate.crt || exit $? openssl verify -purpose sslserver -untrusted intermediateCA.crt -CAfile rootCA.crt server_from_intermediate.crt || exit $?
log "Verify server_protected certificate"
openssl verify -purpose sslserver -CAfile rootCA.crt server_protected.crt || exit $?
log "Create server_from_intermediate_with_chain.crt" log "Create server_from_intermediate_with_chain.crt"
cat server_from_intermediate.crt intermediateCA.crt > server_from_intermediate_with_chain.crt cat server_from_intermediate.crt intermediateCA.crt > server_from_intermediate_with_chain.crt
......
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
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
64t3XtDpQwSRUaH1eNyFTrteag== dGX2a9ojus6U0AJ+a3GXuyo=
-----END PRIVATE KEY----- -----END PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIC/jCCAeagAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0 MIIC/jCCAeagAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0
YWNoZS5pbzAeFw0yMDA1MjYyMDUxMTRaFw0zMDA1MjQyMDUxMTRaMD4xCzAJBgNV YWNoZS5pbzAeFw0yMTA5MTIyMDEyMDdaFw0zMTA5MTAyMDEyMDdaMD4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxDzANBgNVBAMM BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxDzANBgNVBAMM
BnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMItSaWOvHCl BnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMAwnfBQX39T
DVTJiIrNTSMqVtrcc+MuCq67wotzvIbEKuwsm4SyYze23VTbUYBlnQFww1fSHxtD vuw+5kKhcnTsjxRpIGatSjJ55kBso6kLtiJVrvseeiMFKKHnXykvKVDPyFHRDw4O
NocuzonsQFLrRgsuaHZu1ia53MPpOEBdYmUOE65zRrkvoGMERBsYiswFmyWMk+0f ub/WFuoAI1IOHt0p8G91ooZNDrQ5Hbvb86//cJknkb222oDwvPLpHf/RMG0Yyj2I
E+E/qICYIq9nL78ejFqTqeAlfZ5Fhy0iq56ktMOdtEOUT5XrDJgaAK8CRxnOuEav EsBPvJeeGEqQ/M0KGR/u2xSRFwhZ7ZnGY61ThO5iJTmUutLEZa2Ci8TLIvl/be+c
m07JluOCgEJ4bcYIKebZTcfaP+SiWu7MGKGaEgJVatPQmBmQE8YUSdEiAaya2z0y EIkuGbygG7sFj0+0/3DgRqEclH9VFZylNGhY5k6pKqnGzXk8cqxNQeZkDW30kR+i
oAyvCsl9VbJnnO2S5gLx0tS5y5n+lnmoENW31kcc9hbddpdKNCOKhiGUtkF4d8JP V1TFi9RhNfohTOdPV39r2I3cNCTGhBqwVxYF83xTVseg9RxQMrm1h2zMwsKVmTyN
ySPWMvvJ2bUCAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYDVR0l BIHvil7Ni40CAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYDVR0l
BAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAAZ9SmSwZAeXx8xkoKEo BAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAAEJUp5nPa/13QpupmFB
6PaEtU9fra8KPXOxy9FgFESlBdMIprBfKO5hAG1N9tlN2ptXTZwRHs/38XkTwNgQ NR3Llry+8ci5LtorirXPUX59OF8iSz72qDcStyqGvgccX7qjuFTUmP+Uivk/5mze
HTRS0faVn5kYJVndBtGem6HD0K++5G57HHRZKEKjhKbFLqRf9AGvyAM4V37wEaMf SNpiVOm3Fx1Q1QK2aZvPgF8rYFnZ3cU0IoTaIa5CyTVf2KLqYo6cYTZd4xLxxtx6
ISWA1ndHROFJFVSfc0+fjWBTtqsdNyai0Z+iJc3GkuSozWRGpaBicGKkG2+5+LrD r5p67gSff4K9J7K8f2G1zzOl3RBcUce9AUOlS+LZVy2Rw/lTaNFk4nnnMjT/CNAC
e7I0Q7F7q2roAP+2HKVUm7IoT3gwsQt3IXcxKhLE2nF2G+ptXpzk/YeZGrQz/ELZ kOSDTj1kyWIo7rWPvNrTQ0PPzSAsQ021YqVNsyQgYPDqLu7RL7dboET/onAAuTBx
HhNkI94g8CLbmGihFWxIjPdIJ4nd1378I7jEd877T7bdsyRlPkTGuZpMAvN2Joqh 462hg6o15qJOTlElfO4nJt6LxmFWAs7KPaHNjtPhOVrv5uwgzxf0hIW8Z/znzWaN
ePc= zxg=
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
SyIaowDOQV48TSPnfDcMAt3P73A= Jco604aS++B7nShedw4KMKdz0Rs=
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
SyIaowDOQV48TSPnfDcMAt3P73A= Jco604aS++B7nShedw4KMKdz0Rs=
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0 MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0
YWNoZS5pbzAeFw0yMDA1MjYyMDUxMTRaFw0zMDA1MjQyMDUxMTRaMEYxCzAJBgNV YWNoZS5pbzAeFw0yMTA5MTIyMDEyMDhaFw0zMTA5MTAyMDEyMDhaMEYxCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxFzAVBgNVBAMM BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxFzAVBgNVBAMM
DmludGVybWVkaWF0ZUNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA DmludGVybWVkaWF0ZUNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
0iEC56M/lo5cxAqSIxMvISygNusCndcVigTW1e6iKSJib2ve4/q0egeyUO9uU/dU xtfxC/m85TYzXLEKb26FcAxFwUVBTn4xh6itLCU4c1mo3KtJZNOQWMFHLTqufxiN
ciOILmNOa3zuNJmol0iowS85wyte8E53hH15qk9QpRI6UMhmveUyKfdTbiwlfLO6 +yYBSDTdibxfV/tWH2KwXpgI4A7w9DtpGCUimojUpLXR5qMwJGl+4wz9n0/VvLqI
gMdXPkAsr/vXTP5QUZYDFfujYBtk5CDpfxQR4hPdgA0zud97BiZMm69AunH5A0jx Z3E+xzNdHdtuqisoGOwc7ppYnYuwSOxLPDTU1Z/XADwiHX23H88smUPjRDMnWeBN
eu9AsmYJwVrTFM3EX/j8m8Fg06IeJHaD42Sz942gnglJWvRfS2IJbpnr7sOGvZ/0 dRqnxVE6Ad0brYXKClsHLSK3VWh6+vzoYkLf36A9Oc3uzcI6ca/MP5ej7wxJ2qQx
FIJdqjAV8v3qNcDf6X5436SCLCDZXADIHedP2AGMYLaplEZLC7UaTNm9zIvvYg0X ddTEb4sgxeroJ+he/MPVn+h/pYmRK1K+FpefYVVb2jV6LW+AggjyfWOMfxR9UhtK
dR6VWb+tOSVKU4aNCehyvwIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG B9bAwEOIw+bsW2dngbbpgQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQANF+lALL3xWgXrhJA2RkBziSLFyF3YE/g7kVhZHko+Cxks SIb3DQEBCwUAA4IBAQAXpQABwXwzM84DxfASuuQvR9dSXNIal2wqnB86E2nrKzIj
UzDBZrkn7fbhorTu/j2+QiA/mOGauVNfrgkeZvK1jXvwsE1CmH0e95SczEZVydhm gzn0FcY4OK1N0LYDg5SyFJnakmqwN6ExojuxysnSeI7eu81Yz45VAEXdyumT+rCc
U8nPGYY2Jhq7JuSJSgYOp7ewweAbibHFo8kYVO2aNYfHHcyS9fDVzJ/Ojn7qnIvS g1xbf7AlyXfBYKd+jau8EW5hu6DtMmfnXPnKgZm9kUjaMeTywnbg0nPwq7QBUb/O
JO1aUvWqzdGn0XLPdKj2Jms6NN59/iXgF5I9r5NRMOgA4pUaSe7lUcMT8Oy+PyYE e07QPbW/elf90FQFWFgEYxt0hwG90glqV9v0lpyUeBEmH1C0w4ElP05pYhePvggU
3qKszDIGURdP3Ujzdl6YM3edZJTCieBq6AJwY0CmO6TUJmkpQT0Avx3jyV6lajQH 4XLvuh14nbN6495O9L/wb1p3NYHXuVKlXo9kNnxTgjTpi1BPXQviJBI8sbnfhDRD
6qvKipItp6aUx/Uq9eFrpUvXsFSOsdIS1IS+9qHW XRWxWzWweC1/kJ5X0WIAgRpG8oVymfiU6373CetD
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIC/jCCAeagAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtwaXN0
YWNoZS5pbzAeFw0yMTA5MTIyMDEyMDhaFw0zMTA5MTAyMDEyMDhaMD4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIUGlzdGFjaGUxDzANBgNVBAMM
BnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALiXKwakcyCc
UvTc0gfit4csDgF+raza9KBYJ2DsS6M7/41KQTt7lW/cHUsgU9xYQcWI6FpgoDJn
fgkYw1EqcBHXziLGn/adm8NavDU00L4Krp9oXve2VKSu9ZSAeheS3OsJfr1mdQGd
gAbg4rrX897RfRIkzaohc7J46eNwJDPMfkKs7YeQtnPbWDueGGgHjvTckDPTe/nZ
+xq+5AbbFAkQcO5SgJOy46rgWmpp0pXqgI1fQfFqv4eoQWiztz6uVpPWLmq2eool
foaBX9rfqhGfRodlQ+ltXS43KmhnQ5bu7v+VR8iPYNOLpfAbdOspsGL3A1Xav+zP
0TYYYin6Q9kCAwEAAaMvMC0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYDVR0l
BAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAD396vKR3SoLUJQD1JdZ
04gbFpnyahAR0kWl6P+HmEny6o9UWJw20qrgPrRufcp/DCAXCA/C3J9X5BCvNryI
39B+b/BIjdarB3yWr/iuHMoBPXBu7rVRKQtWWh4VaG5+hZlzhGbMEYnfZR5Vl8mB
ZHFoLyLYykIdF82tiuWy7EH4mri8y0RdohG7WNcPrjdBmImnBqOCANavL8e6x9DA
DPDhW9frM8tA1OpLGdent/IHW+Ovp/asbE0HqTASdwRXNfee2wE/I7NSfenb7cO5
f7kb3oqsbcULHhOqo/3/02D5DmuAnAMEZQKCLhJWUZyrgMk2vHz3EEEoGap2WTyn
xN0=
-----END CERTIFICATE-----
SPDX-FileCopyrightText: 2021 Andrea Pappacoda
SPDX-License-Identifier: CC0-1.0
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,F4B756BA5A6CB0DC815FA74D6B243BD4
O3lHFDYTJ51hKuoNLY7ECINh/9Fbh7+9++WHsny5O2+lKXgv+RR3d+gNZ8qsaeUJ
51PPwoq/GSPzOL+YjUzuDAAYAG76BL6QO7ZG8TOP9qNK2noMbke0h51QdgQWTxMe
4v0YgexIqTIvBZNWPzBYvWOPHUnfVavJQRay2sNPMmVXgKMXTOpbleSikodf5K0r
VwB+mn/p6GMFkeUC9A8CG6P8c74w1ZvtBMGBgVYMtFRhUfTkNElQ6fDfyW1/5IbR
l7qND4BgAQLjUSNwHS7uYvzGlZHxdwGNmzAOpyvJtd20vhsufpY3VgVJkYXYSsUi
nUBRU5RhMYRmY7rHW2p96VWAwIUjUHHf60+21IUcY8bT9dcvFIvSWGGSkcvIBTxz
Bqc2D+eCNJgTo0puwevazNxfWAHlR/K5OFw4GWCD0EqHZWSvzEO69Rd3OZ+3F5Ty
X9JgF326KXjEq9JWbbiRc0dt5tyt14GKn7Ei+TOw4ouv2ViZa42j9mGBfaxzDWip
BJORejTr/ZiDQQQsl0QAye8UASMoekq6hNhH5B+Z4wSgsCXc+bbvi2bgRpnY/mbA
ntJ/uGdLS2PXX8JgR0bdafuOPBfnja76g+8LXHm1SszAP+PvLJCpDGIkxBnPYz3f
yX1ZAsrsPyTD11/shFHFfIaBffnK4r99YGIV/oZjyRQ5kh3Zoh1mF+a5liEfWdQn
hyuKxmd4heh4uO6qCtS8gxbMBzm7+/Em1aIzH28z0JUPyx6hw3OdCTYQ5OB5EZEu
2NCh8HzgVPIpu3pr2s4nDid8FpL7qReoZZZc1gvaRnGlIUb9PPnHks8bXXr1uItm
2G3vUnhx9yze5l/gY0GNDW/R+YARL9iN+6m42eS7vc4POcL9+3/5KoSfweCT79wF
XoM9tEjHsdskSmO5Z/55DcXIjTnJftgr6pvg98iAHRi00ZZyb52djFjANZzJODNC
toj3FZqUnONc/24CUZp8urZtIfL9bna/UWIeY81RUqVScxsCXrvko+zL39Otsjpr
vfmd0Qf3JkzBHSFOlIZYoCjiszSKnU2THMzpiVTyDt67Qu+g0T4VTns2kleH/1hX
jRHXJNXHOrrqKWH1TZ6rHJTEVILV9Vxt0ijArc4puThzqQHRCLh8m+qbQfbhlol7
qg1pmZTyQWiYYlnE+mEOQwjHO6Y8dBWxPWKVf0XrYa2UXypDjoXQXHZhI09G9gxa
EB0J1/Hqq5Xp1oCY0pRODAhbCdiFDME2COuc7A9V8f3UkX06XEpLPITj+H1+uwYM
8IGz2voqPlFq/HqWRDEnewPbkMR4sICo/oMUUQC148NaRYxDwbjuB8m6SuekFcuy
hfhWfkzJQZsl3B/9YSQKyX+mNKYPy+v9pq2Mwj/DDQwG8/RVbkMgVdyV2cadeRzB
Y01RC+1uM1GZknXmCIuRPDOnvUArFd4mIYhRIo37odLdglsnOZVHPZMyKyZuRS78
2qtbB0rWiWY4xlTAAJWa8VFAmJcisJQF3Fq4Z9nyx8QS75LTzHJJ1gj8ob8CYpIL
BmAcfH4g9vtio97BGGrh5LDKwg2rlSGi67ZdPIlXBekLImZhucaPo/DmqO0uxf5e
-----END RSA PRIVATE KEY-----
SPDX-FileCopyrightText: 2021 Andrea Pappacoda
SPDX-License-Identifier: CC0-1.0
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
*/ */
#include <array> #include <array>
#include <cstring>
#include <pistache/client.h> #include <pistache/client.h>
#include <pistache/endpoint.h> #include <pistache/endpoint.h>
...@@ -56,7 +57,7 @@ struct ServeFileHandler : public Http::Handler ...@@ -56,7 +57,7 @@ struct ServeFileHandler : public Http::Handler
} }
}; };
TEST(http_client_test, basic_tls_request) TEST(https_server_test, basic_tls_request)
{ {
Http::Endpoint server(Address("localhost", Pistache::Port(0))); Http::Endpoint server(Address("localhost", Pistache::Port(0)));
auto flags = Tcp::Options::ReuseAddr; auto flags = Tcp::Options::ReuseAddr;
...@@ -96,7 +97,7 @@ TEST(http_client_test, basic_tls_request) ...@@ -96,7 +97,7 @@ TEST(http_client_test, basic_tls_request)
ASSERT_EQ(buffer, "Hello, World!"); ASSERT_EQ(buffer, "Hello, World!");
} }
TEST(http_client_test, basic_tls_request_with_chained_server_cert) TEST(https_server_test, basic_tls_request_with_chained_server_cert)
{ {
Http::Endpoint server(Address("localhost", Pistache::Port(0))); Http::Endpoint server(Address("localhost", Pistache::Port(0)));
auto flags = Tcp::Options::ReuseAddr; auto flags = Tcp::Options::ReuseAddr;
...@@ -137,7 +138,7 @@ TEST(http_client_test, basic_tls_request_with_chained_server_cert) ...@@ -137,7 +138,7 @@ TEST(http_client_test, basic_tls_request_with_chained_server_cert)
ASSERT_EQ(buffer, "Hello, World!"); ASSERT_EQ(buffer, "Hello, World!");
} }
TEST(http_client_test, basic_tls_request_with_auth) TEST(https_server_test, basic_tls_request_with_auth)
{ {
Http::Endpoint server(Address("localhost", Pistache::Port(0))); Http::Endpoint server(Address("localhost", Pistache::Port(0)));
auto flags = Tcp::Options::ReuseAddr; auto flags = Tcp::Options::ReuseAddr;
...@@ -181,7 +182,7 @@ TEST(http_client_test, basic_tls_request_with_auth) ...@@ -181,7 +182,7 @@ TEST(http_client_test, basic_tls_request_with_auth)
ASSERT_EQ(buffer, "Hello, World!"); ASSERT_EQ(buffer, "Hello, World!");
} }
TEST(http_client_test, basic_tls_request_with_auth_no_client_cert) TEST(https_server_test, basic_tls_request_with_auth_no_client_cert)
{ {
Http::Endpoint server(Address("localhost", Pistache::Port(0))); Http::Endpoint server(Address("localhost", Pistache::Port(0)));
auto flags = Tcp::Options::ReuseAddr; auto flags = Tcp::Options::ReuseAddr;
...@@ -222,7 +223,7 @@ TEST(http_client_test, basic_tls_request_with_auth_no_client_cert) ...@@ -222,7 +223,7 @@ TEST(http_client_test, basic_tls_request_with_auth_no_client_cert)
ASSERT_NE(res, CURLE_OK); ASSERT_NE(res, CURLE_OK);
} }
TEST(http_client_test, basic_tls_request_with_auth_client_cert_not_signed) TEST(https_server_test, basic_tls_request_with_auth_client_cert_not_signed)
{ {
Http::Endpoint server(Address("localhost", Pistache::Port(0))); Http::Endpoint server(Address("localhost", Pistache::Port(0)));
auto flags = Tcp::Options::ReuseAddr; auto flags = Tcp::Options::ReuseAddr;
...@@ -275,7 +276,7 @@ static int verify_callback(int verify, void* ctx) ...@@ -275,7 +276,7 @@ static int verify_callback(int verify, void* ctx)
return 1; return 1;
} }
TEST(http_client_test, basic_tls_request_with_auth_with_cb) TEST(https_server_test, basic_tls_request_with_auth_with_cb)
{ {
Http::Endpoint server(Address("localhost", Pistache::Port(0))); Http::Endpoint server(Address("localhost", Pistache::Port(0)));
auto flags = Tcp::Options::ReuseAddr; auto flags = Tcp::Options::ReuseAddr;
...@@ -321,7 +322,7 @@ TEST(http_client_test, basic_tls_request_with_auth_with_cb) ...@@ -321,7 +322,7 @@ TEST(http_client_test, basic_tls_request_with_auth_with_cb)
callback_called = false; callback_called = false;
} }
TEST(http_client_test, basic_tls_request_with_servefile) TEST(https_server_test, basic_tls_request_with_servefile)
{ {
Http::Endpoint server(Address("localhost", Pistache::Port(0))); Http::Endpoint server(Address("localhost", Pistache::Port(0)));
auto flags = Tcp::Options::ReuseAddr; auto flags = Tcp::Options::ReuseAddr;
...@@ -369,3 +370,48 @@ TEST(http_client_test, basic_tls_request_with_servefile) ...@@ -369,3 +370,48 @@ TEST(http_client_test, basic_tls_request_with_servefile)
ASSERT_EQ(res, CURLE_OK); ASSERT_EQ(res, CURLE_OK);
ASSERT_EQ(buffer.rfind("-----BEGIN CERTIFICATE-----", 0), 0u); ASSERT_EQ(buffer.rfind("-----BEGIN CERTIFICATE-----", 0), 0u);
} }
TEST(https_server_test, basic_tls_request_with_password_cert)
{
Http::Endpoint server(Address("localhost", Pistache::Port(0)));
const auto passwordCallback = [](char* buf, int size, int /*rwflag*/, void* /*u*/) -> int
{
static constexpr const char* const password = "test";
std::strncpy(buf, password, size);
return static_cast<int>(std::strlen(password));
};
server.init(Http::Endpoint::options().flags(Tcp::Options::ReuseAddr));
server.setHandler(Http::make_handler<HelloHandler>());
server.useSSL("./certs/server_protected.crt", "./certs/server_protected.key", false, passwordCallback);
server.serveThreaded();
CURL* curl;
CURLcode res;
std::string buffer;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
ASSERT_NE(curl, nullptr);
const auto url = getServerUrl(server);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_CAINFO, "./certs/rootCA.crt");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_cb);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
/* Skip hostname check */
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_global_cleanup();
server.shutdown();
ASSERT_EQ(res, CURLE_OK);
ASSERT_EQ(buffer, "Hello, World!");
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment