Add client_cert_optional to tlcp/tls12

This commit is contained in:
Zhi Guan
2026-06-17 16:42:29 +08:00
parent 765e4d7747
commit b0e5c4aa1b
10 changed files with 30 additions and 16 deletions

View File

@@ -819,7 +819,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.1083") set(CPACK_PACKAGE_VERSION "3.2.0-dev.1084")
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

@@ -1441,7 +1441,7 @@ int tls13_record_get_handshake_certificate_request(const uint8_t *record,
const uint8_t **exts, size_t *exts_len); const uint8_t **exts, size_t *exts_len);
int tls13_certificate_request_print(FILE *fp, int fmt, int ind, const uint8_t *d, size_t dlen); int tls13_certificate_request_print(FILE *fp, int fmt, int ind, const uint8_t *d, size_t dlen);
int tls13_ctx_enable_client_certificate_optional(TLS_CTX *ctx, int enable); int tls_ctx_enable_client_certificate_optional(TLS_CTX *ctx, int enable);
// EndOfEarlyData // EndOfEarlyData

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.1083" #define GMSSL_VERSION_STR "GmSSL 3.2.0-dev.1084"
int gmssl_version_num(void); int gmssl_version_num(void);
const char *gmssl_version_str(void); const char *gmssl_version_str(void);

View File

@@ -3015,6 +3015,16 @@ int tls_ctx_set_key_update_seq_num_limit(TLS_CTX *ctx, size_t max_seq_num)
return 1; return 1;
} }
int tls_ctx_enable_client_certificate_optional(TLS_CTX *ctx, int enable)
{
if (!ctx) {
error_print();
return -1;
}
ctx->client_certificate_optional = enable ? 1 : 0;
return 1;
}
static int tls_ctx_get_certificate_chain(const TLS_CTX *ctx, size_t idx, static int tls_ctx_get_certificate_chain(const TLS_CTX *ctx, size_t idx,
const uint8_t **cert_chain, size_t *cert_chain_len) const uint8_t **cert_chain, size_t *cert_chain_len)
{ {

View File

@@ -3447,16 +3447,6 @@ int tls13_certificate_request_print(FILE *fp, int fmt, int ind, const uint8_t *d
return 1; return 1;
} }
int tls13_ctx_enable_client_certificate_optional(TLS_CTX *ctx, int enable)
{
if (!ctx) {
error_print();
return -1;
}
ctx->client_certificate_optional = enable ? 1 : 0;
return 1;
}
/* /*
CertificateVerify CertificateVerify

View File

@@ -401,6 +401,13 @@ bad:
} }
} }
if (client_cert_optional) {
if (tls_ctx_enable_client_certificate_optional(&ctx, 1) != 1) {
error_print();
goto end;
}
}
if (alpn_protocols_cnt) { if (alpn_protocols_cnt) {
if (tls_ctx_set_application_layer_protocol_negotiation(&ctx, if (tls_ctx_set_application_layer_protocol_negotiation(&ctx,
alpn_protocols, alpn_protocols_cnt) != 1) { alpn_protocols, alpn_protocols_cnt) != 1) {

View File

@@ -386,6 +386,13 @@ bad:
} }
} }
if (client_cert_optional) {
if (tls_ctx_enable_client_certificate_optional(&ctx, 1) != 1) {
error_print();
goto end;
}
}
if (cacertfile) { if (cacertfile) {
if (tls_ctx_set_ca_certificates(&ctx, cacertfile, verify_depth) != 1) { if (tls_ctx_set_ca_certificates(&ctx, cacertfile, verify_depth) != 1) {
fprintf(stderr, "%s: failed to load CA certificate\n", prog); fprintf(stderr, "%s: failed to load CA certificate\n", prog);

View File

@@ -354,7 +354,7 @@ bad:
goto end; goto end;
} }
if (client_cert_optional) { if (client_cert_optional) {
if (tls13_ctx_enable_client_certificate_optional(&ctx, 1) != 1) { if (tls_ctx_enable_client_certificate_optional(&ctx, 1) != 1) {
error_print(); error_print();
goto end; goto end;
} }

View File

@@ -600,7 +600,7 @@ bad:
// CertificateRequest // CertificateRequest
if (client_cert_optional) { if (client_cert_optional) {
if (tls13_ctx_enable_client_certificate_optional(&ctx, 1) != 1) { if (tls_ctx_enable_client_certificate_optional(&ctx, 1) != 1) {
error_print(); error_print();
goto end; goto end;
} }

View File

@@ -418,7 +418,7 @@ bad:
goto end; goto end;
} }
if (client_cert_optional) { if (client_cert_optional) {
if (tls13_ctx_enable_client_certificate_optional(&ctx, 1) != 1) { if (tls_ctx_enable_client_certificate_optional(&ctx, 1) != 1) {
error_print(); error_print();
goto end; goto end;
} }