开发者社区 > 云原生 > 中间件 > 正文

tengine-3.1.0 + Tongsuo-8.4.0 在centos7.9 编译报错 SSL

错误:‘SSL_NORMAL_CERT’未声明(在此函数内第一次使用)
SSL_NORMAL_CERT)
image.png

这个问题怎么处理,麻烦大佬解答一下,谢谢

展开
收起
游客ctcrj2l3xtxga 2024-08-25 15:42:49 166 0
12 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    您可能需要手动修改源代码。根据错误信息,您需要定义SSL_NORMAL_CERT。这通常涉及到包含正确的头文件或定义缺失的标识符。

    #ifndef SSL_NORMAL_CERT
    #define SSL_NORMAL_CERT (your_value_here)
    #endif
    

    其中your_value_here是适当的值,这需要您根据OpenSSL的文档或源代码来确定。
    检查编译器标志,确保没有启用过于严格的警告处理,如-Werror,这会将所有警告当作错误处理。image.png

    2024-10-25 16:12:50
    赞同 展开评论 打赏
  • 遇到编译错误“‘SSL_NORMAL_CERT’未声明”时,这通常意味着Tengine在编译时尝试使用的某些SSL相关宏或常量未被识别。考虑到您正在使用的是Tengine-3.1.0与Tongsuo-8.4.0组合,并在CentOS 7.9环境下操作,此问题可能是由于Tongsuo版本更新或编译选项不兼容导致的。虽然直接的知识库参考资料没有覆盖Tengine-3.1.0和Tongsuo-8.4.0的具体编译指导,但我们可以基于现有信息尝试解决这一问题。

    解决方案建议

    1. 确认Tengine与Tongsuo兼容性
      首先,确认Tengine-3.1.0是否支持与Tongsuo-8.4.0的集成。查看Tengine和Tongsuo的官方文档或发布说明,确认这两个版本之间是否存在已知的兼容性问题。如果存在版本不匹配的情况,考虑降级Tongsuo至一个已知与Tengine-3.1.0兼容的版本,或者升级Tengine到一个支持Tongsuo-8.4.0的版本。

    2. 检查编译选项
      在编译Tengine时,确保使用的./configure命令正确反映了Tongsuo的集成需求。根据Tengine的更新和Tongsuo的新特性,可能需要调整编译参数。特别是涉及到SSL部分的配置,如--with-openssl=...--add-module=...等选项,需确认与Tongsuo-8.4.0的集成方式是否有变化。

    {8B3C2B17-4339-4677-A1AC-54A01DD65701}.png
    {8B3C2B17-4339-4677-A1AC-54A01DD65701}.png

    相关链接
    https://help.aliyun.com/zh/ssl-certificate/user-guide/install-an-rsa-and-sm2-dual-certificate-on-a-tengine-server

    2024-10-19 19:22:53
    赞同 展开评论 打赏
  • 在编译 Tengine 3.1.0 与 Tongsuo 8.4.0 遇到的 SSL_NORMAL_CERT 未声明错误通常是由于某些头文件没有被正确包含,或者是在编译过程中使用了不兼容的 OpenSSL 版本。

    检查编译参数

    在编译 Tengine 时,确保正确指定了 Tongsuo 的 include 和 lib 目录。以下是一个编译命令的例子:

    ./configure --with-openssl=/path/to/tongsuo-8.4.0
    make
    make install
    
    2024-10-19 19:08:14
    赞同 展开评论 打赏
  • SSL_NORMAL_CERT 可能是在某个特定的头文件中定义的。需要检查是否包含了定义该标识符的头文件。

    from man erron:
    : It was common in traditional C to declare errno manually (i.e., extern
    : int errno) instead of including . Do not do this. It will ,

    因此:添加#include头文件

    ——参考链接

    2024-10-18 17:16:04
    赞同 1 展开评论 打赏
  • 在这段代码中,有以下几个错误:
    SSL_NORMAL_CERT 在第69行被引用,但是它似乎没有在这个函数的局部作用域内被正确地声明。
    类似的,在第710行也出现了另一个未声明的标识符错误,这次是针对 SSL_ENC_CERT。
    第711行出现了一个隐式声明函数的问题,函数名为 SSL_CTX_use_enc_certificate。
    同样,SSL_SIGN_CERT(在第719行)和SSL_CTX_use_sign_certificate(在第720行)也遇到了未声明的错误。
    要解决这些错误,你需要确保所有使用的常量和函数都在适当的位置进行了声明,并且确保它们在整个源文件或头文件中有正确的定义。这可能需要查看相关的库文档或者检查你的包含语句以确保必要的头文件已经被引入。

    2024-10-18 16:48:47
    赞同 展开评论 打赏
  • 缺少依赖项:
    确保您的系统上安装了所有必需的依赖项,特别是与 SSL/TLS 相关的库,如 OpenSSL。
    使用 yum 或 dnf(在 CentOS 8 及更高版本中)来安装这些依赖项,例如:yum install openssl-devel。
    OpenSSL 版本不兼容:
    Tengine 和 Tongsuo 可能需要特定版本的 OpenSSL。如果系统上安装的 OpenSSL 版本与这些软件不兼容,您可能需要安装一个不同版本的 OpenSSL。
    检查 Tengine 和 Tongsuo 的文档,以确定它们支持的 OpenSSL 版本。
    编译选项问题:
    在编译 Tengine 和 Tongsuo 时,确保正确设置了与 SSL 相关的编译选项。
    这通常涉及在配置脚本中启用 SSL 支持,例如通过 --with-openssl 选项。
    头文件和库文件路径:
    如果 OpenSSL 安装在非标准路径下,您可能需要在编译时指定这些路径。
    使用 --with-openssl-dir 或类似的选项来指定 OpenSSL 的安装目录。
    配置脚本问题:
    有时,配置脚本可能无法正确检测系统上安装的 OpenSSL。
    在这种情况下,您可以尝试手动设置与 SSL 相关的变量,或在配置脚本中添加必要的检查。
    权限问题:
    确保您有足够的权限来访问和编译所需的文件。
    如果是在受限制的环境中(如某些企业服务器),您可能需要联系系统管理员来获取必要的权限。
    查看编译日志:
    仔细查看编译过程中生成的日志文件,以获取有关错误的更多详细信息。
    这些日志通常包含有关缺失文件、不兼容的库版本或编译选项错误的提示。

    2024-10-16 10:27:16
    赞同 展开评论 打赏
  • 这个错误提示表明在编译 Tengine 3.1.0 和 Tongsuo 8.4.0 时,编译器找不到 SSL_NORMAL_CERT 这个宏定义。这可能是由于缺少相应的头文件或者库文件导致的。

    为了解决这个问题,你需要确保已经安装了 OpenSSL 开发包,并且在编译 Tengine 时链接了正确的 OpenSSL 库。你可以按照以下步骤操作:

    首先,确保已经安装了 OpenSSL 开发包。在 CentOS 7.9 上,可以使用以下命令安装:

    bash
    复制代码
    sudo yum install openssl-devel

    然后,重新编译 Tengine,确保在编译过程中链接了正确的 OpenSSL 库。你可以在编译命令中添加 --with-openssl=/path/to/openssl 参数,指定 OpenSSL 的安装路径。例如:

    bash
    复制代码
    ./configure --prefix=/usr/local/tengine --with-openssl=/usr/include/openssl
    make
    sudo make install

    注意将 /path/to/openssl 替换为实际的 OpenSSL 安装路径。如果你不确定 OpenSSL 的安装路径,可以使用以下命令查找:

    bash
    复制代码
    find / -name "openssl*"

    希望这些信息能帮助你解决问题。如果问题仍然存在,请检查你的系统环境和编译配置,确保所有依赖项都已正确安装。

    2024-10-16 09:54:04
    赞同 展开评论 打赏
  • 深耕大数据和人工智能

    这个错误提示表明在编译 Tengine 3.1.0 和 Tongsuo 8.4.0 时,编译器找不到 SSL_NORMAL_CERT 这个宏定义。这可能是由于缺少相应的头文件或者库文件导致的。

    为了解决这个问题,你需要确保已经安装了 OpenSSL 开发包,并且在编译 Tengine 时链接了正确的 OpenSSL 库。你可以按照以下步骤操作:

    首先,确保已经安装了 OpenSSL 开发包。在 CentOS 7.9 上,可以使用以下命令安装:

    bash
    复制代码
    sudo yum install openssl-devel

    然后,重新编译 Tengine,确保在编译过程中链接了正确的 OpenSSL 库。你可以在编译命令中添加 --with-openssl=/path/to/openssl 参数,指定 OpenSSL 的安装路径。例如:

    bash
    复制代码
    ./configure --prefix=/usr/local/tengine --with-openssl=/usr/include/openssl
    make
    sudo make install

    注意将 /path/to/openssl 替换为实际的 OpenSSL 安装路径。如果你不确定 OpenSSL 的安装路径,可以使用以下命令查找:
    bash
    复制代码
    find / -name "openssl*"
    希望这些信息能帮助你解决问题。如果问题仍然存在,请检查你的系统环境和编译配置,确保所有依赖项都已正确安装。

    2024-10-16 09:45:14
    赞同 展开评论 打赏
  • 在给定的代码段中,有多个错误消息表明某些符号没有正确声明或定义。这通常意味着这些变量或函数尚未在其作用域内进行声明。对于错误“'SSL_NORMAL_CERT'未声明”,您需要确保SSL_NORMAL_CERT是在适当的位置声明的。这可能是一个宏定义或者一个枚举成员。如果没有在当前文件或其他包含文件中找到它的声明,则编译器会报告此错误。请检查您的源代码以确定在哪里可以找到这个符号的声明,并确保它已正确包含。同样地,“隐式声明函数”错误表示您正在调用一个未声明的函数。在这种情况下,编译器无法识别SSL_CTX_use_enc_certificate和SSL_CTX_use_sign_certificate以及SSL_CTX_use_enc_PrivateKey和SSL_CTX_use_sign_PrivateKey等函数。为了解决这个问题,确保这些函数已在适当的头文件中声明,并且它们的原型与实际调用匹配。

    2024-10-16 08:41:09
    赞同 展开评论 打赏
  • 一般来说
    遇到编译错误“SSL_NORMAL_CERT未声明”时,这通常意味着你的编译环境中缺少了必要的定义或者与SSL相关的库文件版本不兼容。考虑到您正在使用的是Tengine-3.1.0与Tongsuo-8.4.0搭配在CentOS 7.9环境下编译,此问题可能是由于Tengine配置或Tongsuo集成时的不匹配导致的
    确认Tengine配置: 确保在配置Tengine时正确地包含了Tongsuo的支持,并且指定了正确的路径。参照提供的资料

    ,请检查您的./configure命令是否类似于以下格式,并且路径是否正确无误:
    image.png

    还有就是兼容性——》
    确认Tengine-3.1.0与Tongsuo-8.4.0之间是否存在已知的兼容性问题。有时,新版本的软件组件可能需要特定版本的依赖库。查阅官方文档或社区论坛,看是否有其他用户报告了类似问题及解决方案

    参考文档

    2024-10-15 18:39:12
    赞同 展开评论 打赏
  • 技术浪潮涌向前,学习脚步永绵绵。

    在编译 Tengine 3.1.0 并集成 Tongsuo 8.4.0 时遇到 SSL_NORMAL_CERT 未声明的错误,这通常意味着 Tengine 的源代码中引用了某个 OpenSSL 或其兼容库(如 Tongsuo)中的宏或常量,但该宏或常量在当前使用的 Tongsuo 版本中并不存在。
    1111.png

    解决方法

    检查 Tongsuo 版本

    首先,确认你使用的 Tongsuo 版本是否支持 Tengine 中使用的所有功能。SSL_NORMAL_CERT 可能是某个特定版本的 OpenSSL 中定义的宏,但在 Tongsuo 中可能没有被定义。
    1111.png

    修改 Tengine 源码

    如果 SSL_NORMAL_CERT 确实不存在于 Tongsuo 中,你可以尝试修改 Tengine 的源码以适应 Tongsuo。以下是可能的步骤:

    1. 查找引用

      • 在 Tengine 的源码中找到所有引用 SSL_NORMAL_CERT 的地方。通常这些引用会出现在与 SSL 相关的模块中。
    2. 替换宏

      • 如果 SSL_NORMAL_CERT 是一个特定的证书类型标识符,可以尝试将其替换为 Tongsuo 中等效的宏或常量。例如,如果 SSL_NORMAL_CERT 表示普通的 SSL 证书,可以尝试用 SSL_FILETYPE_PEM 或其他类似的宏来替换。
    3. 条件编译

      • 使用预处理器指令来区分不同的 SSL 库。例如:
        #ifdef USE_TONGSUO
        #define SSL_NORMAL_CERT SSL_FILETYPE_PEM
        #else
        // 原有的定义
        #endif
        
    4. 检查头文件

      • 确保你包含了正确的头文件,并且这些头文件中确实定义了你需要的宏和函数。

    示例修改

    假设你在 Tengine 的某个文件中找到了如下代码:

    if (cert_type == SSL_NORMAL_CERT) {
        // 处理逻辑
    }
    

    你可以尝试这样修改:

    #ifndef SSL_NORMAL_CERT
    #define SSL_NORMAL_CERT SSL_FILETYPE_PEM
    #endif
    
    if (cert_type == SSL_NORMAL_CERT) {
        // 处理逻辑
    }
    

    或者更详细的条件编译:

    #ifdef USE_TONGSUO
    #define SSL_NORMAL_CERT SSL_FILETYPE_PEM
    #else
    // 假设这是 OpenSSL 中的定义
    #define SSL_NORMAL_CERT SSL_FILETYPE_PEM
    #endif
    
    if (cert_type == SSL_NORMAL_CERT) {
        // 处理逻辑
    }
    

    编译选项

    确保你的编译命令中正确指定了 Tongsuo 的路径。例如:

    ./configure --with-openssl=/path/to/tongsuo
    make
    make install
    

    其他建议

    • 查看文档:查阅 Tongsuo 和 Tengine 的官方文档,看看是否有相关的说明或已知问题。
    • 社区支持:如果上述方法无效,可以考虑向 Tongsuo 和 Tengine 的社区求助,可能已经有其他人遇到了相同的问题并找到了解决方案。
    • 更新版本:确保你使用的是最新版本的 Tongsuo 和 Tengine,因为新版本可能已经修复了这些问题。

    通过以上方法,你应该能够解决 SSL_NORMAL_CERT 未声明的问题。如果还有其他编译错误,请提供更多的错误信息以便进一步诊断。

    2024-10-14 15:18:19
    赞同 展开评论 打赏
  • 确认依赖是否安装:确保已经安装了必要的依赖,如 pcre-devel 和 pcre2-devel。如果没有安装,可以使用以下命令进行安装:

    sudo yum install -y pcre-devel pcre2-devel

    检查编译配置:在编译 Tengine 时,确保使用了正确的配置选项。例如,使用 --with-pcre=system 参数来指定使用系统提供的 PCRE 库:

    ./configure --with-pcre=system

    在Nginx中,ssl_certificate_key和ssl_certificate是用于配置SSL/TLS加密连接的关键指令。

    ssl_certificate_key: 这个指令用于指定SSL证书的私钥文件的路径。私钥文件通常包含与SSL证书配对的私钥,用于加密和解密通信中的数据。私钥是SSL/TLS加密的关键组成部分,它用于生成加密的会话密钥和对数据进行解密。私钥文件通常是以PEM格式存储的。示例配置如下:

    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    1
    ssl_certificate: 这个指令用于指定SSL证书文件的路径。SSL证书文件包含用于验证服务器身份的公钥以及相关信息,如服务器的域名和证书颁发机构(CA)的签名。当客户端与服务器建立SSL/TLS连接时,服务器会发送该证书以供客户端验证。证书文件通常是以PEM格式存储的。示例配置如下:

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    1
    这两个指令一起工作,确保Nginx能够使用SSL/TLS协议与客户端建立加密连接。当客户端与服务器建立连接时,Nginx会使用指定的证书和私钥来进行SSL/TLS握手过程。客户端会验证服务器提供的证书,并使用服务器的公钥加密会话密钥,以确保通信的机密性和完整性。私钥用于解密客户端发送的数据,并用于服务器身份验证。
    image.png

    参考文档https://blog.csdn.net/JINXFOREVER/article/details/137342300

    2024-10-14 15:32:24
    赞同 展开评论 打赏
滑动查看更多

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
阿里Tengine网关最佳实践 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载