本仓库基于 curl 8.20.0,增加了 GmSSL SSL/TLS 后端。该后端通过 curl 的 vtls 接口调用 GmSSL TLS API,可用于测试 TLS 1.2、TLS 1.3 以及国密相关 cipher suite。
先准备一个启用了 TLS、AES、SHA2 和 P-256 的 GmSSL:
git clone --depth 1 --branch v3.2.0 https://github.com/guanzhi/GmSSL.git
cd GmSSL
cmake -S . -B build-tls \
-DENABLE_TLS=ON \
-DENABLE_AES=ON \
-DENABLE_SHA2=ON \
-DENABLE_SHA1=ON \
-DENABLE_SECP256R1=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build-tls编译完成后,GmSSL 库通常位于 build-tls/bin/,头文件位于 include/。
在本仓库根目录中配置并编译:
cmake -S . -B build-gmssl \
-DCURL_USE_GMSSL=ON \
-DCURL_USE_OPENSSL=OFF \
-DCURL_USE_MBEDTLS=OFF \
-DGMSSL_LIBRARY=/path/to/GmSSL/build-tls/bin/libgmssl.dylib \
-DGMSSL_INCLUDE_DIR=/path/to/GmSSL/include \
-DCURL_USE_LIBPSL=OFF \
-DCURL_ZSTD=OFF \
-DCURL_USE_LIBSSH2=OFF \
-DCURL_DISABLE_LDAP=ON \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_CURL_EXE=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build-gmsslLinux 上的 GMSSL_LIBRARY 通常是 libgmssl.so,macOS 上通常是
libgmssl.dylib。
./build-gmssl/src/curl -V输出中应包含类似内容:
libcurl/8.20.0 GmSSL/GmSSL 3.2.0
其中 GmSSL/GmSSL 3.2.0 表示当前 curl 使用的是 GmSSL TLS 后端以及对应
GmSSL 版本。
也可以在连接时使用 -v 查看握手结果:
./build-gmssl/src/curl -v https://127.0.0.1:19454/成功时会看到类似:
GmSSL: TLSv1.3 Handshake complete, cipher is TLS_AES_128_GCM_SHA256
使用 TLS 1.3:
./build-gmssl/src/curl \
--tlsv1.3 \
--cacert rootcacert.pem \
https://127.0.0.1:19454/使用 TLS 1.2:
./build-gmssl/src/curl \
--tlsv1.2 \
--cacert rootcacert.pem \
https://127.0.0.1:19443/TLS 1.3 使用 --tls13-ciphers:
./build-gmssl/src/curl \
--tlsv1.3 \
--tls13-ciphers TLS_AES_128_GCM_SHA256 \
--cacert rootcacert.pem \
https://127.0.0.1:19454/TLS 1.2 使用 --ciphers:
./build-gmssl/src/curl \
--tlsv1.2 \
--ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 \
--cacert rootcacert.pem \
https://127.0.0.1:19443/当前 GmSSL 后端支持的主要 cipher suite 包括:
TLS_SM4_GCM_SM3
TLS_AES_128_GCM_SHA256
TLS_ECDHE_SM4_GCM_SM3
TLS_ECDHE_SM4_CBC_SM3
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
当前不支持 AES-256、CCM 和 ChaCha20-Poly1305 cipher suite。如果显式指定的 cipher suite 全部不被 GmSSL 后端支持,curl 会返回 cipher 配置错误,而不会回退到 默认 cipher suite。