mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-08-16 15:21:24 +00:00
The cert_ip_cn.pem and cert_ipv6.pem certificates added in ba390f2 were
only generated by gen-certs.sh, which the Makefile-based Linux/macOS CI
uses. The Windows CI builds with CMake, whose own certificate-generation
block was not updated, so cert_ipv6.pem was missing there and
SSLClientServerTest.TlsVerifyHostnameIpv6San failed on is_valid().
Mirror the two openssl commands into test/CMakeLists.txt to keep both
certificate-generation paths in sync.
139 lines
5.4 KiB
CMake
139 lines
5.4 KiB
CMake
find_package(GTest)
|
|
|
|
if(GTest_FOUND)
|
|
if(NOT TARGET GTest::gtest_main AND TARGET GTest::Main)
|
|
# CMake <3.20
|
|
add_library(GTest::gtest_main INTERFACE IMPORTED)
|
|
target_link_libraries(GTest::gtest_main INTERFACE GTest::Main)
|
|
endif()
|
|
else()
|
|
if(POLICY CMP0135)
|
|
cmake_policy(SET CMP0135 NEW)
|
|
endif()
|
|
|
|
include(FetchContent)
|
|
|
|
set(BUILD_GMOCK OFF)
|
|
set(INSTALL_GTEST OFF)
|
|
set(gtest_force_shared_crt ON)
|
|
|
|
FetchContent_Declare(
|
|
gtest
|
|
URL https://github.com/google/googletest/archive/main.tar.gz
|
|
)
|
|
FetchContent_MakeAvailable(gtest)
|
|
endif()
|
|
|
|
find_package(CURL REQUIRED)
|
|
|
|
add_executable(httplib-test test.cc include_httplib.cc $<$<BOOL:${WIN32}>:include_windows_h.cc>)
|
|
target_compile_options(httplib-test PRIVATE "$<$<CXX_COMPILER_ID:MSVC>:/utf-8;/bigobj>")
|
|
target_link_libraries(httplib-test PRIVATE httplib GTest::gtest_main CURL::libcurl)
|
|
gtest_discover_tests(httplib-test)
|
|
|
|
file(
|
|
COPY www www2 www3 ca-bundle.crt image.jpg
|
|
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
|
|
if(HTTPLIB_IS_USING_OPENSSL)
|
|
if (OPENSSL_VERSION VERSION_LESS "3.2.0")
|
|
set(OPENSSL_X509_FLAG "-x509")
|
|
else()
|
|
set(OPENSSL_X509_FLAG "-x509v1")
|
|
endif()
|
|
find_program(OPENSSL_COMMAND
|
|
NAMES openssl
|
|
PATHS ${OPENSSL_INCLUDE_DIR}/../bin
|
|
REQUIRED
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} genrsa 2048
|
|
OUTPUT_FILE key.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key key.pem
|
|
COMMAND ${OPENSSL_COMMAND} x509 -days 3650 -req -signkey key.pem
|
|
OUTPUT_FILE cert.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req ${OPENSSL_X509_FLAG} -new -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key key.pem -sha256 -days 3650 -nodes -out cert2.pem -extensions SAN
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} genrsa 2048
|
|
OUTPUT_FILE rootCA.key.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req ${OPENSSL_X509_FLAG} -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.rootCA.conf -key rootCA.key.pem -days 1024
|
|
OUTPUT_FILE rootCA.cert.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} genrsa 2048
|
|
OUTPUT_FILE client.key.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key client.key.pem
|
|
COMMAND ${OPENSSL_COMMAND} x509 -days 370 -req -CA rootCA.cert.pem -CAkey rootCA.key.pem -CAcreateserial
|
|
OUTPUT_FILE client.cert.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} genrsa -passout pass:test123! 2048
|
|
OUTPUT_FILE key_encrypted.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key key_encrypted.pem
|
|
COMMAND ${OPENSSL_COMMAND} x509 -days 3650 -req -signkey key_encrypted.pem
|
|
OUTPUT_FILE cert_encrypted.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} genrsa -aes256 -passout pass:test012! 2048
|
|
OUTPUT_FILE client_encrypted.key.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req -new -batch -config ${CMAKE_CURRENT_LIST_DIR}/test.conf -key client_encrypted.key.pem -passin pass:test012!
|
|
COMMAND ${OPENSSL_COMMAND} x509 -days 370 -req -CA rootCA.cert.pem -CAkey rootCA.key.pem -CAcreateserial
|
|
OUTPUT_FILE client_encrypted.cert.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
# Certificates for IP-host hostname verification regression tests.
|
|
# cert_ip_cn.pem: CN is an IPv4 literal with NO subjectAltName. An IP host
|
|
# must NOT be authenticated via the CN, so verifying it
|
|
# against this cert must fail.
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req -x509 -key key.pem -sha256 -days 3650 -nodes -subj /CN=127.0.0.1 -out cert_ip_cn.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
# cert_ipv6.pem: CN is an IPv6 literal plus an IPv6 iPAddress SAN for a
|
|
# different address. The SAN address must match; the CN
|
|
# address must be ignored.
|
|
execute_process(
|
|
COMMAND ${OPENSSL_COMMAND} req -x509 -key key.pem -sha256 -days 3650 -nodes -subj /CN=::1 -addext subjectAltName=IP:2001:db8::1 -out cert_ipv6.pem
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
endif()
|
|
|
|
add_subdirectory(fuzzing)
|