如何使用 OpenSSL 添加自定义 OpenSSL 引擎并从 apache 服务器使用?

如何使用 OpenSSL 添加自定义 OpenSSL 引擎并从 apache 服务器使用?

我有一个定制的 OpenSSL 引擎。我正在尝试进行更改以openssl.cnf自动加载此引擎。我的最终目标是将此引擎用于 Apache mod-ssl。

Apache mod_ssl 在 Ubuntu 14.04 上使用 OpenSSL ENGINE,解决我的问题,我尝试按照建议的解决方案进行操作。我已使用OpenSSL 1.1.1c以下配置从源代码安装,

./config --prefix=/opt/openssl -DOPENSSL_LOAD_CONF --openssldir=/opt/openssl/ssl 

根据在 openssl 1.1.0 中将自定义 openssl 引擎库复制到哪里,我添加了以下更改以openssl.cnf自动加载我的引擎,

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
rsa-engine-new = rsa_section

[rsa_section]
engine_id = rsa-engine-new
#dynamic_path = /opt/openssl/lib/engines-1.1/rsa-engine-new.so  <-- Uncomment this line cause segmentation fault

完成更改后,运行openssl engine显示以下内容,

root@ss:/opt/openssl/ssl# openssl engine 
rsa-engine-new
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
(rsa-engine-new) engine for testing 1
140496290879232:error:260AB089:engine routines:ENGINE_ctrl_cmd_string:invalid cmd name:crypto/engine/eng_ctrl.c:255:
140496290879232:error:260BC066:engine routines:int_engine_configure:engine configuration error:crypto/engine/eng_cnf.c:141:section=rsa_section, name=oid_section, value=new_oids
140496290879232:error:0E07606D:configuration file routines:module_run:module initialization error:crypto/conf/conf_mod.c:177:module=engines, value=engine_section, retcode=-1      

输出openssl engine显示一些错误,但我的引擎自动加载并用作默认引擎。

然后我使用httpd-2.4.10以下配置从源代码安装,

CFLAGS='-DSSL_EXPERIMENTAL_ENGINE -DSSL_ENGINE -DOPENSSL_LOAD_CONF' ./configure --prefix=/etc/apache2 --enable-ssl --with-ssl=/opt/openssl/ssl --with-pcre=/usr/local/pcre --enable-so

安装后,我取消了注释Include conf/extra/httpd-ssl.conf。我在文件httpd.conf中添加了以下更改,/etc/apache2/conf/extra/httpd-ssl.conf

SSLCryptoDevice rsa-engine-new  <-- line 31
#SSLCryptoDevice /opt/openssl/lib/engines-1.1/rsa-engine-new

当我尝试重新启动 httpd 服务器时,出现以下错误,

root@ss:/etc/apache2/bin# ./httpd -k restart
AH00526: Syntax error on line 31 of /etc/apache2/conf/extra/httpd-ssl.conf:
SSLCryptoDevice: Invalid argument; must be one of: 'builtin' (none), 'rdrand' (Intel RDRAND engine), 'dynamic' (Dynamic engine loading support)

我的问题是,

  1. 为什么openssl engine引擎运行时会抛出错误?我该如何修复这个问题?
  2. 我该如何配置httpd-ssl.cnf才能使用 mod-ssl?

答案1

我认为您的两个问题可能是由于版本不匹配造成的。您正在从 OpenSSL 1.1.1c 源代码构建引擎,并尝试将其与另一个版本的 OpenSSL 一起使用。

动态引擎和 OpenSSL 核心之间的接口可能依赖于版本,这表现为加载动态引擎时出现段错误。

您应该从 1.1.1c 源构建整个 OpenSSL 库,或者为您的引擎找到与您的 OpenSSL 安装版本相同的源版本。

相关内容