【问题标题】:Does ActiveMQ-CPP 3.9.4 Support OpenSSL 1.1.0?ActiveMQ-CPP 3.9.4 是否支持 OpenSSL 1.1.0?
【发布时间】:2017-09-01 18:08:55
【问题描述】:

我正在尝试构建 Apache ActiveMQ-CPP 的最新版本,即 3.9.4。我已经构建了两个必需的依赖项,APR 和 OpenSSL。对于 OpenSSL,这是 1.1.0f 版本。我能够在没有 SSL 支持的情况下构建所有 4 种配置(Debug、DebugDLL、Release、ReleaseDLL)。但是,尝试使用 SSL 支持构建任何东西会导致许多错误:

..\src\main\decaf\internal\net\ssl\openssl\OpenSSLContextSpi.cpp(186):错误 C3861:“CRYPTO_malloc_init”:找不到标识符
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(667):错误 C2027:使用未定义类型“X509_extension_st”
C:\OpenSource\OpenSSL\1.1.0f\include\openssl/x509.h(79):注意:参见“X509_extension_st”的声明
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(667):错误 C2227:“->值”左侧必须指向类/结构/联合/通用类型
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(667):错误 C2227:“->数据”的左侧必须指向类/结构/联合/通用类型
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(670):错误 C2027:使用未定义类型“X509_extension_st”
C:\OpenSource\OpenSSL\1.1.0f\include\openssl/x509.h(79):注意:参见“X509_extension_st”的声明
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(670):错误 C2227:“->值”左侧必须指向类/结构/联合/通用类型
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(670):错误 C2227:'->length' 左侧必须指向类/结构/联合/通用类型
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(670):错误 C2660:'ASN1_item_d2i':函数不接受 3 个参数
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(671):错误 C2027:使用未定义类型“X509_extension_st”
C:\OpenSource\OpenSSL\1.1.0f\include\openssl/x509.h(79):注意:参见“X509_extension_st”的声明
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(671):错误 C2227:“->值”左侧必须指向类/结构/联合/通用类型
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(671):错误 C2227:'->length' 的左侧必须指向类/结构/联合/通用类型
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(671): 错误 C2198: 'X509V3_EXT_D2I': 调用的参数太少
..\src\main\decaf\internal\net\ssl\openssl\OpenSSLSocket.cpp(671): error C2198: 'X509V3_EXT_I2V': too little arguments for call

自从在 3.2.0 中添加支持以来,发行说明没有提及任何关于 OpenSSL 的内容。但是,ActiveMQ-CPP 3.9.4 下载中包含的 README.txt 文件指出:

如果您希望使用 SSL 传输,那么您需要在您的系统上安装 OpenSSL 及其包含的组件。我们建议您使用 1.0.0 或更高版本以获得最佳性能和安全性,但也可以使用 0.9.8 版本。

This StackOverflow question 似乎表明我的第一个错误(见上文)暗示 ActiveMQ-CPP 不支持 OpenSSL 1.1.0。但是,ActiveMQ-CPP Jira site 上似乎没有关于缺乏 OpenSSL 1.1.0 支持的问题,他们自己的文档明确指出我应该能够使用“1.0.0 或更高版本”。

有谁知道 ActiveMQ-CPP 3.9.4 是否支持 OpenSSL 1.1.0?

【问题讨论】:

  • 从引用问题中的一个答案...见Apache Issue 60061 - OpenSSL 1.1.0 support
  • @jww 我提供了一个链接的那个问题是针对不同产品的。您发布的链接是针对 Apache httpd-2 报告的问题,而不是 Apache ActiveMQ-CPP。
  • 拒绝投票者是否愿意发表评论?关于如何改进问题的任何建议?
  • 可能在 ActiveMQ-CPP 3.9.5 中得到解决:参见Jira ticket AMQCPP-623。这个问题含糊不清,但正是在该答案发布几个月后回答此问题的人打开了它。
  • @TimBish 确认 here ActiveMQ-CPP 3.9.5 仍然不支持 OpenSSL 1.1.1。似乎不再维护 ActiveMQ-CPP。 QPid Proton 是受更好支持的 C++ 消息传递客户端。

标签: openssl activemq-cpp


【解决方案1】:

客户端不支持 ActiveMQ mailing lists 上报告的 OpenSSL 1.1.0。不过,我认为没有人愿意为此提出问题。

【讨论】:

  • 您能否提供一个链接,指向您在 ActiveMQ 邮件列表中找到该信息的位置?我找不到它。
【解决方案2】:

如果您安装了正确的 openssl 和 devel 库,RHEL8/OracleLinux8/Centos8 上的 v3.9.5 现在似乎可以正确编译。

https://activemq.apache.org/components/cms/download/395-release

yum install openssl-devel apr apr-devel apr-util-openssl openssl-pkcs11

我是使用 gcc-toolset-10 完成的,但其他版本的 GCC 应该也可以。

我还安装了 ssl compat 库,但我认为这些库不是必需的:compat-openssl10

安装的OpenSSL版本为:openssl-1.1.1g-15.el8_3.x86_64

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 2018-10-17
    • 2014-08-24
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多