mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-06 11:53:39 +08:00
Update TLS 1.3
Cross-validation with openssl s_client. HelloRetryReqeust not OK.
This commit is contained in:
@@ -37,7 +37,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define warning_print() \
|
#define warning_print() \
|
||||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0)
|
do { if (DEBUG) fprintf(stderr, " warning %s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0)
|
||||||
|
|
||||||
#define error_print() \
|
#define error_print() \
|
||||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0)
|
do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0)
|
||||||
|
|||||||
1
src/ecdsa_p256.sage
Normal file
1
src/ecdsa_p256.sage
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
26
src/tls13.c
26
src/tls13.c
@@ -1706,12 +1706,13 @@ int tls13_key_share_entry_from_bytes(int *group, const uint8_t **key_exchange, s
|
|||||||
}
|
}
|
||||||
*group = named_curve;
|
*group = named_curve;
|
||||||
if (!tls_named_curve_name(named_curve)) {
|
if (!tls_named_curve_name(named_curve)) {
|
||||||
error_print();
|
warning_print();
|
||||||
return -1;
|
//return -1;
|
||||||
}
|
}
|
||||||
if (*key_exchange_len != 65) {
|
if (*key_exchange_len != 65) {
|
||||||
error_print();
|
// 只有SM2/P256才满足,但是对方可能发送其他类型的key_share
|
||||||
return -1;
|
warning_print(); // FIXME:
|
||||||
|
//return -1;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -2286,7 +2287,7 @@ int tls13_client_hello_print(FILE *fp, int fmt, int ind, const uint8_t *d, size_
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
format_bytes(fp, fmt, ind + 4, "data", ext_data, ext_datalen);
|
format_bytes(fp, fmt, ind + 4, "data", ext_data, ext_datalen);
|
||||||
error_print();
|
//error_print();
|
||||||
//return -1;
|
//return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6863,9 +6864,9 @@ int tls13_recv_client_hello(TLS_CONNECT *conn)
|
|||||||
case TLS_extension_cookie:
|
case TLS_extension_cookie:
|
||||||
error_print();
|
error_print();
|
||||||
default:
|
default:
|
||||||
error_print();
|
warning_print();
|
||||||
tls13_send_alert(conn, TLS_alert_illegal_parameter);
|
//tls13_send_alert(conn, TLS_alert_illegal_parameter);
|
||||||
return -1;
|
//return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7003,6 +7004,15 @@ int tls13_recv_client_hello(TLS_CONNECT *conn)
|
|||||||
int common_cipher_suites[4];
|
int common_cipher_suites[4];
|
||||||
size_t common_cipher_suites_cnt;
|
size_t common_cipher_suites_cnt;
|
||||||
|
|
||||||
|
if (!conn->ctx->cert_chains) {
|
||||||
|
error_print();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (!conn->ctx->cert_chains_len) {
|
||||||
|
error_print();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = tls13_cert_chains_select(
|
if ((ret = tls13_cert_chains_select(
|
||||||
conn->ctx->cert_chains, conn->ctx->cert_chains_len,
|
conn->ctx->cert_chains, conn->ctx->cert_chains_len,
|
||||||
common_sig_algs, common_sig_algs_cnt,
|
common_sig_algs, common_sig_algs_cnt,
|
||||||
|
|||||||
@@ -246,8 +246,8 @@ int tls_process_supported_groups(const uint8_t *ext_data, size_t ext_datalen,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!tls_named_curve_name(group)) {
|
if (!tls_named_curve_name(group)) {
|
||||||
error_print();
|
warning_print();
|
||||||
return -1;
|
//return -1;
|
||||||
}
|
}
|
||||||
if (group == local_groups[0] && j < max_cnt) {
|
if (group == local_groups[0] && j < max_cnt) {
|
||||||
common_groups[j++] = group;
|
common_groups[j++] = group;
|
||||||
@@ -483,8 +483,8 @@ int tls_process_signature_algorithms(const uint8_t *ext_data, size_t ext_datalen
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!tls_signature_scheme_name(sig_alg)) {
|
if (!tls_signature_scheme_name(sig_alg)) {
|
||||||
error_print();
|
warning_print(); // FIXME
|
||||||
return -1;
|
//return -1;
|
||||||
}
|
}
|
||||||
if (sig_alg == local_sig_algs[0] && j < max_cnt) {
|
if (sig_alg == local_sig_algs[0] && j < max_cnt) {
|
||||||
common_sig_algs[j++] = sig_alg;
|
common_sig_algs[j++] = sig_alg;
|
||||||
@@ -667,9 +667,11 @@ int tls_ext_from_bytes(int *type, const uint8_t **data, size_t *datalen, const u
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*type = ext_type;
|
*type = ext_type;
|
||||||
|
|
||||||
|
// FIXME: handle unkonwn ext
|
||||||
if (!tls_extension_name(ext_type)) {
|
if (!tls_extension_name(ext_type)) {
|
||||||
error_print();
|
warning_print();
|
||||||
return -1;
|
//return -1;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,17 +140,21 @@ static const char *help =
|
|||||||
"\n"
|
"\n"
|
||||||
"TLS 1.3 with TLS_AES_128_GCM_SHA256\n"
|
"TLS 1.3 with TLS_AES_128_GCM_SHA256\n"
|
||||||
" sudo gmssl tls13_server -port 4430 \\\n"
|
" sudo gmssl tls13_server -port 4430 \\\n"
|
||||||
" -cipher_suite TLS_AES_128_GCM_SHA256 -supported_group prime256v1 -sig_alg ecdsa_secp256r1_sha256\n"
|
" -cipher_suite TLS_AES_128_GCM_SHA256 -supported_group prime256v1 -sig_alg ecdsa_secp256r1_sha256 \\\n"
|
||||||
" -cert p256certs.pem -key p256signkey.pem -pass 1234\n"
|
" -cert p256certs.pem -key p256signkey.pem -pass 1234\n"
|
||||||
"\n"
|
"\n"
|
||||||
" gmssl tls13_client -host 127.0.0.1 -port 4430 -cacert rootcacerts.pem \\\n"
|
" gmssl tls13_client -host 127.0.0.1 -port 4430 -cacert rootcacerts.pem \\\n"
|
||||||
" -cipher_suite TLS_AES_128_GCM_SHA256 -supported_group prime256v1 -sig_alg ecdsa_secp256r1_sha256\n"
|
" -cipher_suite TLS_AES_128_GCM_SHA256 -supported_group prime256v1 -sig_alg ecdsa_secp256r1_sha256\n"
|
||||||
"\n"
|
"\n"
|
||||||
" add `SSL_CTX_clear_options(ctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);` to openssl apps/s_server.c\n"
|
" add `SSL_CTX_clear_options(ctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);` to openssl apps/s_server.c\n"
|
||||||
|
" add `SSL_CTX_clear_options(ctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);` to openssl apps/s_client.c\n"
|
||||||
|
"\n"
|
||||||
" /usr/local/bin/openssl s_server -accept 4430 -cert p256signcert.pem -cert_chain p256cacert.pem -key p256signkey.exp \\\n"
|
" /usr/local/bin/openssl s_server -accept 4430 -cert p256signcert.pem -cert_chain p256cacert.pem -key p256signkey.exp \\\n"
|
||||||
" -tls1_3 -ciphersuites TLS_AES_128_GCM_SHA256 -named_curve prime256v1 \\\n"
|
" -tls1_3 -ciphersuites TLS_AES_128_GCM_SHA256 -named_curve prime256v1 \\\n"
|
||||||
" -trace -keylogfile sslkeys.log\n"
|
" -trace -keylogfile sslkeys.log\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
" /usr/local/bin/openssl s_client -connect 127.0.0.1:4430 -tls1_3 -CAfile p256rootcacert.pem -groups prime256v1 -trace\n"
|
||||||
|
"\n"
|
||||||
"TLS 1.3 SNI\n"
|
"TLS 1.3 SNI\n"
|
||||||
"\n"
|
"\n"
|
||||||
" sudo gmssl tls13_server -port 4430 \\\n"
|
" sudo gmssl tls13_server -port 4430 \\\n"
|
||||||
@@ -361,12 +365,17 @@ int tls13_server_main(int argc , char **argv)
|
|||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
certfile = *(++argv);
|
certfile = *(++argv);
|
||||||
|
|
||||||
|
error_print();
|
||||||
|
|
||||||
if (certfiles_cnt >= sizeof(certfiles)/sizeof(certfiles[0])) {
|
if (certfiles_cnt >= sizeof(certfiles)/sizeof(certfiles[0])) {
|
||||||
error_print();
|
error_print();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
certfiles[certfiles_cnt++] = certfile;
|
certfiles[certfiles_cnt++] = certfile;
|
||||||
|
|
||||||
|
|
||||||
|
fprintf(stderr, "111certfiles_cnt = %zu\n", certfiles_cnt);
|
||||||
|
|
||||||
} else if (!strcmp(*argv, "-key")) {
|
} else if (!strcmp(*argv, "-key")) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1) goto bad;
|
||||||
keyfile = *(++argv);
|
keyfile = *(++argv);
|
||||||
@@ -520,9 +529,8 @@ bad:
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: 打印载入的证书信息
|
||||||
for (i = 0; i < certfiles_cnt; i++) {
|
for (i = 0; i < certfiles_cnt; i++) {
|
||||||
|
|
||||||
fprintf(stderr, "add_certificate_chain_and_key\n");
|
|
||||||
if (tls_ctx_add_certificate_chain_and_key(&ctx, certfiles[i], keyfiles[i], passes[i]) != 1) {
|
if (tls_ctx_add_certificate_chain_and_key(&ctx, certfiles[i], keyfiles[i], passes[i]) != 1) {
|
||||||
error_print();
|
error_print();
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user