AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 838360
Accepted
Orphans
Orphans
Asked: 2017-03-16 00:16:40 +0800 CST2017-03-16 00:16:40 +0800 CST 2017-03-16 00:16:40 +0800 CST

为什么即使我只有 OpenSSL1.0.1t,HTTP/2 测试也会说我支持 ALPN?

  • 772

这个问题有点相关,为什么我的服务器不支持 ALPN?

但在我的情况下, 即使我没有使用 OpenSSL1.0.2 并且仅使用 OpenSSL1.0.1t,同样的测试确实表明支持 ALPN

我目前正在使用激活 h2 的 Apache2.4.25。但是即使我的 OpenSSL 不应该支持 ALPN,它仍然让我感到困扰?

我启用了 conf 的 http2.conf:

Protocols h2 h2c http/1.1
H2Push          on  
H2PushPriority  *                       after  
H2PushPriority  text/css                before  
H2PushPriority  image/jpeg              after   32  
H2PushPriority  image/png               after   32  
H2PushPriority  application/javascript  interleaved
SSLProtocol all -SSLv2 -SSLv3  
SSLHonorCipherOrder on  
SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384       EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'

LDD的输出:

╰─➤  ldd /usr/sbin/apache2                                                                                                                                                 1 ↵
linux-vdso.so.1 (0x00007ffc4d593000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa1c2492000)
libaprutil-1.so.0 => /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0 (0x00007fa1c2269000)
libapr-1.so.0 => /usr/lib/x86_64-linux-gnu/libapr-1.so.0 (0x00007fa1c2034000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa1c1e17000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa1c1a6c000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fa1c1867000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa1c165f000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa1c1428000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa1c1224000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fa1c0ffb000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa1c29a5000)

反问表示赞赏!

openssl apache-2.4 alpn
  • 4 4 个回答
  • 3255 Views

4 个回答

  • Voted
  1. Tero Kilkanen
    2017-03-16T07:57:13+08:002017-03-16T07:57:13+08:00

    ldd输出不包含对libssl.so. 这表明您的 Apache 使用 SSL 库的静态链接版本,这意味着 OpenSSL 包含在 Apache2 二进制文件中。

    因此,您的 Apache2 不使用系统上的 SSL 库。

    • 2
  2. iwaseatenbyagrue
    2017-03-16T01:52:56+08:002017-03-16T01:52:56+08:00

    除了建议您可能安装了两个版本的 openSSL(或测试结果错误)之外,我找不到任何其他解释。

    Apache2 的 mod_http2 基于 nghttp2,其文档 ( https://nghttp2.org/documentation/nghttpx-howto.html#alpn-support ) 指出:

    ALPN 支持

    ALPN 支持需要 OpenSSL >= 1.0.2。

    奇怪的是,1.0.1t ( https://www.openssl.org/news/openssl-1.0.1-notes.html ) 的发行说明提到:

    修改 ALPN 的行为以在 SNI/servername 回调之后调用回调,这样对 SSL_CTX 的更新会影响 ALPN。

    跟踪该消息会导致https://github.com/openssl/openssl/commit/1316ca80f4e1dc9339572c780d495f995fe0bad0。

    然而,这似乎只为 1.1.0 贡献了代码——我找不到它在 1.0.1t 中更改的证据。

    理论上,ALPN 和 NPN密切相关(https://hpbn.co/transport-layer-security-tls/#application-layer-protocol-negotiation-alpn)——两者之间的主要区别在于谁宣布协议. 但是我根本无法为您的发现找到合乎逻辑的解释,因此必须询问您是否确定您的前提。

    您可以在没有 ALPN 的情况下提供 HTTP/2(我使用您链接到的测试/工具进行了检查),但我找不到任何东西来解释为什么 ALPN 会显示为受支持。

    我能找到的唯一其他线索是 RH 的错误报告,其中详细讨论了这个问题:

    https://bugzilla.redhat.com/show_bug.cgi?id=1276310

    有人建议 RH 团队可能会对此做些什么,但我没有看到任何明确的迹象表明 ALPN 向后移植到 1.0.1。并且不知道 RedHat 相关讨论是否与您的情况相关。

    • 1
  3. Best Answer
    Orphans
    2017-03-18T01:13:30+08:002017-03-18T01:13:30+08:00

    似乎测试存储库中的 apache 2.4.25 与 libssl 1.0.2 一起编译,这就解释了为什么即使系统上没有安装 OpenSSL1.0.2,服务器也支持 ALPN。

    • 0
  4. user2845840
    2018-12-05T09:54:25+08:002018-12-05T09:54:25+08:00

    我不能直接评论 ALPN 问题,但除非表明 ssl_module 或 http2_module 是静态的而不是共享的(共享是大多数模块的默认设置) ,否则ldd不应使用。分别使用。反而。从那里应该可以找出您真正链接的版本。/usr/sbin/apache2apachectl -Mldd $(locate mod_ssl.so)ldd $(locate mod_http2.so)

    • 0

相关问题

  • 如何在 Mac OS X 服务器上安装替换 SSL 证书?

  • 在 LAMPP 中升级单个库(特别是 openssl)

  • 带有基于商业 CA 的客户端证书的 ssl_error_handshake_failure_alert

  • 我可以对 *.domain.com 和 domain.com 使用相同的通配符认证吗

  • 为 apache 生成自签名 SSL 证书

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve