配置 Apache 服务器以使用特定的 OpenSSL 引擎

Posted

技术标签:

【中文标题】配置 Apache 服务器以使用特定的 OpenSSL 引擎【英文标题】:Configure Apache server to use specific OpenSSL Engine 【发布时间】:2016-08-06 05:41:17 【问题描述】:

我有一个可用的 OpenSSL RSA 引擎(即一个 .so 文件)和一个配置为 SSL 模式的 Apache 服务器。 如何让 Apache 使用我的 RSA 引擎中的 RSA 实现?换句话说:我将引擎放在哪里(.so 文件),如何修改openssl.cnf 文件以及如何构建 Apache?

【问题讨论】:

Custom OpenSSL engine when running within Apache via mod_ssl 在 Unix 和 Linux Stack Exchange 上,Integrating Apache with PKCS#11 device via engine_pkcs11 and OpenSSL 在服务器故障上。 您好 jww,我已经阅读了您提供的第一个链接,但我不知道如何修改 openssl.cnf 文件。你认为this 会是一个好的开始吗? @jww 我修改了openssl.cnf 文件,并按照我在上一条评论中提供的链接中的说明添加了我的引擎。 Apache documentation 说“要发现支持哪些引擎名称,请运行命令“openssl engine””,但我的引擎 ID 没有出现在列表中。我该如何解决这个问题? 【参考方案1】:

首先,我不完全理解您的问题。我想您的意思是您的系统上安装了 Apache 正在使用的 OpenSSL 版本,并且您想使用您也下载并安装的其他版本(可能是更高版本)?

这实际上取决于哪个平台(Windows 或 Linux),如何安装 Apache(预安装在系统上,通过 yum 或 apt-get 等包管理器,或从源代码手动安装)。

像 Windows 安装和包管理器中的预构建包倾向于使用系统默认的 SSL 库,并且不是最容易更改的(尽管老实说我对它们都不够熟悉)。

因此,最简单的方法是从源代码安装 Apache,而不是从预构建的包中安装。

你通常需要在编译时设置这个,下载源代码后,使用 --with-ssl 选项进行配置,然后再使用 make 构建代码:

./configure --with-ssl=/usr/local/ssl --enable-ssl --enable-so

如果您之前没有从源代码安装,那么这可能有点吓人。我已经在一篇关于 HTTP2 的博客文章中给出了详细说明,介绍了如何从 linux 上的源代码下载和安装最新的 OpenSSL 和 Apache:https://www.tunetheweb.com/performance/http2/,但在您的特定平台上可能有更好的选择。

【讨论】:

我觉得我不是很了解。因此,当我尝试安装 Apache 时,我应该使用您在上述答案中所说的内容吗? 我扩展了我的答案。 我不想使用不同的 OpenSSL 版本。我只想集成一个OpenSSL engine,以便使用不同的 RSA 算法实现 在 Linux 中,OpenSSL 引擎是一个.so 文件,可以这样使用,例如:$ openssl speed rsa -engine pwd/my_engine.so。基本上我需要知道如何将这个.so 文件与Apache 集成,以便使用我自己的RSA 实现。我知道我需要从其源文件构建 Apache,但我不知道下一步该做什么。 我想说按照 jww 的链接使用 conf 文件创建客户构建,然后按照我的回答使用该自定义构建构建 Apache。【参考方案2】:

对我有用的步骤:

1.从源安装OpenSSL,运行./config时指定-DOPENSSL_LOAD_CONF 1.1.创建/构建您的 OpenSSL 引擎并将其添加到您的 openssl.cnf 文件 2.使用以下命令从源安装 httpd:

CFLAGS='-DSSL_EXPERIMENTAL_ENGINE -DSSL_ENGINE -DOPENSSL_LOAD_CONF' ./configure --enable-ssl --with-ssl=/usr/local/ssl --with-pcre=/usr/local/pcre --enable-so      
make       
make install

2.1.通过添加SSLCryptoDevice engine_id 编辑httpd-ssl.conf 并确保在执行$ openssl engine 时,engine_id 说明符出现在列表中。此外,您必须创建自签名证书和私钥,修改httpd.conf 文件,但这不是本问题的主题。搜索:如何在 Apache 上配置 HTTPS。 3.$ httpd -k restart 仅此而已。

编辑.so 文件(Openssl ENGINE)的位置必须在openssl.cnf 中指定。

【讨论】:

以上是关于配置 Apache 服务器以使用特定的 OpenSSL 引擎的主要内容,如果未能解决你的问题,请参考以下文章

配置 Apache 以接受来自 DOD CAC 的特定证书

使用多个 ProxyPass 配置 Apache

如何配置 Apache localhost 服务器以从其他计算机访问它

openstack第六章-配置MQ

Apache Options指令详解

.htaccess 详解