![如何使用 OpenSSL 添加自定义 OpenSSL 引擎并从 apache 服务器使用?](https://linux22.com/image/765478/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20OpenSSL%20%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%20OpenSSL%20%E5%BC%95%E6%93%8E%E5%B9%B6%E4%BB%8E%20apache%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我有一个定制的 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)
我的问题是,
- 为什么
openssl engine
引擎运行时会抛出错误?我该如何修复这个问题? - 我该如何配置
httpd-ssl.cnf
才能使用 mod-ssl?
答案1
我认为您的两个问题可能是由于版本不匹配造成的。您正在从 OpenSSL 1.1.1c 源代码构建引擎,并尝试将其与另一个版本的 OpenSSL 一起使用。
动态引擎和 OpenSSL 核心之间的接口可能依赖于版本,这表现为加载动态引擎时出现段错误。
您应该从 1.1.1c 源构建整个 OpenSSL 库,或者为您的引擎找到与您的 OpenSSL 安装版本相同的源版本。