我正在为 PostgreSQL-16.4 设置基于后量子加密 (PQC) 的自签名证书,旨在使用 PQC KEM 和 DSA 算法(特别是用于 KEM 的 Kyber768 和用于数字签名的 Dilithium3)。但是,我在日志中遇到以下错误:
LOG: 08P01: could not accept SSL connection: EOF detected
2024-11-06 09:26:26.822 AEDT [80760] LOCATION: be_tls_open_server, be-secure-openssl.c:523
我使用的是openssl-3.3.2,并且我已经在openssl.conf文件中激活了PQC。
我已按照 PQC 要求为 PostgreSQL 客户端和服务器生成并配置了自签名证书。尽管调整了我的配置,但我似乎无法在 SSL 握手初始化期间解决此 EOF 问题。可能是什么原因造成的?如何排除或解决检测到的 EOF 错误?
postgresql.conf 设置:
listen_addresses = '*'
# - SSL -
ssl = on
ssl_ca_file = '/Users/mandapatisaigautam/postgresql_certs/dilithium3_CA_2.crt'
ssl_cert_file = '/Users/mandapatisaigautam/postgresql_certs/server_pqc_2.crt'
#ssl_crl_file = ''
#ssl_crl_dir = ''
ssl_key_file = '/Users/mandapatisaigautam/postgresql_certs/server_pqc_2.key'
ssl_ciphers = 'HIGH:!aNULL' # allowed SSL ciphers
ssl_prefer_server_ciphers = on
#ssl_ecdh_curve = 'prime256v1'
ssl_min_protocol_version = 'TLSv1.2'
ssl_max_protocol_version = 'TLSv1.3'
#ssl_dh_params_file = ''
#ssl_passphrase_command = ''
#ssl_passphrase_command_supports_reload = off
代码修改:
在 fe-secure-openssl.c 中,我添加了以下代码。
if (!SSL_CTX_set1_groups_list(SSL_context, "kyber768") !=1 ) {
fprintf(stderr, "Failed to set KEX/KEM group: kyber768\n");
SSL_CTX_free(SSL_context);
return -1;
}
fprintf(stdout, "Successfully set KEX/KEM group to: kyber768\n");
return 0;
在 be-secure-openssl.c 中
static bool
initialize_kem(SSL_CTX *context, bool isServerStart)
{
#ifndef OPENSSL_NO_KEM
if (SSL_CTX_set1_groups_list(context, "kyber768") != 1)
{
ereport(isServerStart ? FATAL : LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("KEX: could not set key exchange algorithms with specified KEM groups")));
return false;
}
ereport(LOG, (errmsg("KEX: successfully set key exchange algorithms with specified KEM groups")));
#endif
return true;
}
我已经注释掉了后端的initialize_ecdh函数。
我希望这些配置和代码更改能够使用 PQC 证书和 Kyber768 for KEM 成功进行 SSL 连接。但是,连接失败并出现 EOF 检测到错误。
可能导致此 EOF 错误的原因是什么?我应该采取哪些额外步骤或故障排除措施来解决该问题?