使用 openssl 生成后 HTTPS 证书不起作用

问题描述 投票:0回答:1

我使用提供的证书运行了 Espressif HTTPS 服务器示例。我能够成功连接到服务器并接受浏览器中的警告(如预期)。

然后,按照我在

certs
文件夹中发布的上述自述文件中包含的说明进行操作:

openssl req -newkey rsa:2048 -nodes -keyout prvtkey.pem -x509 -days 3650 -out cacert.pem -subj "/CN=My own certificate"

并将新固件上传到ESP32。 现在,我无法再连接了。火狐浏览器 说:

SEC_ERROR_BAD_SIGNATURE

Chrome 说:

ERR_SSL_PROTOCOL_ERROR

在服务器端我收到以下消息:

E (1059558) esp-tls-mbedtls: mbedtls_ssl_handshake returned -0x7780
E (1059558) esp_https_server: esp_tls_create_server_session failed
E (1059558) httpd: httpd_accept_conn: session creation failed
W (1059568) httpd: httpd_server: error accepting new connection

我 RFTM 并遵循他们的指示。什么可能阻止与我使用

openssl
生成的证书创建安全连接?

两个证书(我的和 Expressif 提供的证书)的长度和标头相同。

ssl https openssl esp32 esp-idf
1个回答
0
投票

在阅读了用户总裁 James K. Polk 的评论后,我深入了解了

openssl
生成的文件,发现 Expressif 的官方文档是错误

自述文件报告:

openssl req -newkey rsa:2048 -nodes -keyout prvtkey.pem -x509 -days 3650 -out cacert.pem -subj "/CN=ESP32 HTTPS server example"

但是项目的CMakeLists.txt包含:

idf_component_register(SRCS "main.c"
                    INCLUDE_DIRS "."
                    EMBED_TXTFILES "certs/servercert.pem"
                                   "certs/prvtkey.pem")

事实上,cert目录也包含这些文件。 因此

openssl
创建了
cacert.pem
而不是
servercert.pem

发出的正确命令是:

openssl req -newkey rsa:2048 -nodes -keyout prvtkey.pem -x509 -days 3650 -out servercert.pem -subj "/CN=ESP32 HTTPS server example"

这会导致预期的行为。

© www.soinside.com 2019 - 2024. All rights reserved.