Fix client certificate verify

This commit is contained in:
Zhi Guan
2026-06-17 00:09:39 +08:00
parent cdd43c9610
commit b4906f1220
3 changed files with 15 additions and 5 deletions

View File

@@ -818,7 +818,7 @@ endif()
# #
set(CPACK_PACKAGE_NAME "GmSSL") set(CPACK_PACKAGE_NAME "GmSSL")
set(CPACK_PACKAGE_VENDOR "GmSSL develop team") set(CPACK_PACKAGE_VENDOR "GmSSL develop team")
set(CPACK_PACKAGE_VERSION "3.2.0-dev.1067") set(CPACK_PACKAGE_VERSION "3.2.0-dev.1068")
set(CPACK_PACKAGE_DESCRIPTION_FILE ${PROJECT_SOURCE_DIR}/README.md) set(CPACK_PACKAGE_DESCRIPTION_FILE ${PROJECT_SOURCE_DIR}/README.md)
set(CPACK_NSIS_MODIFY_PATH ON) set(CPACK_NSIS_MODIFY_PATH ON)
include(CPack) include(CPack)

View File

@@ -18,7 +18,7 @@ extern "C" {
#define GMSSL_VERSION_NUM 30200 #define GMSSL_VERSION_NUM 30200
#define GMSSL_VERSION_STR "GmSSL 3.2.0-dev.1067" #define GMSSL_VERSION_STR "GmSSL 3.2.0-dev.1068"
int gmssl_version_num(void); int gmssl_version_num(void);
const char *gmssl_version_str(void); const char *gmssl_version_str(void);

View File

@@ -2671,8 +2671,10 @@ int tls_recv_client_key_exchange(TLS_CONNECT *conn)
int tls_recv_certificate_verify(TLS_CONNECT *conn) int tls_recv_certificate_verify(TLS_CONNECT *conn)
{ {
int ret; int ret;
X509_SIGN_CTX sign_ctx;
X509_KEY client_sign_key; X509_KEY client_sign_key;
const uint8_t *signer_id = NULL;
size_t signer_idlen = 0;
const uint8_t *sig; const uint8_t *sig;
size_t siglen; size_t siglen;
@@ -2724,8 +2726,16 @@ int tls_recv_certificate_verify(TLS_CONNECT *conn)
tls_send_alert(conn, TLS_alert_bad_certificate); tls_send_alert(conn, TLS_alert_bad_certificate);
return -1; return -1;
} }
if (client_sign_key.algor_param == OID_sm2) {
signer_id = (uint8_t *)SM2_DEFAULT_ID;
signer_idlen = SM2_DEFAULT_ID_LENGTH;
}
if (x509_verify_init(&sign_ctx, &client_sign_key, signer_id, signer_idlen, sig, siglen) != 1
|| x509_verify_update(&sign_ctx, conn->transcript, conn->transcript_len) != 1
|| x509_verify_finish(&sign_ctx) != 1) {
error_print();
return -1;
}
if (digest_update(&conn->dgst_ctx, conn->record + 5, conn->recordlen - 5) != 1) { if (digest_update(&conn->dgst_ctx, conn->record + 5, conn->recordlen - 5) != 1) {
error_print(); error_print();