perl - 如何为 Mojolicious 设置 SNI 支持?

标签 perl cpan mojolicious

Perl 的 Mojolicious支持Server Name Identification (SNI) ,一些 Web 服务器使用一个 HTTPS 证书来托管多个站点。我正在开发一个未设置为使用它的系统,并且在谷歌上搜索了一下并没有发现任何使过程清晰且各个部分明显的东西。 StackOverflow 问题 Perl LWP GET or POST to an SNI SSL URL提到了几件事。

那么,我需要做什么?

最佳答案

首先,支持 SNI 的不是 Mojolicious(或 LWP 或其他)。它是 IO::Socket::SSL ,但不是真的,因为它是 Net::SSLeay ,但不是真的,因为它是您的 openssl 版本.

  • 安装 openssl 1.0 或更高版本。您可能想使用 --prefix配置选项以将其安装在新目录中,这样您就不会打扰您已经拥有的东西以及其他东西所依赖的东西。
  • 更新 Net::SSLeay针对新的 openssl 编译它。您需要 1.50 或更高版本。这里的问题是后来的 Net::SSLeay很乐意与年长的 openssl 合作.升级模块不会让您获得新的 openssl。
  • 更新 IO::Socket::SSL到 1.56 或更高版本。最早的版本是从 2012 年开始的,所以无论如何你都应该更新。
  • Mojolicious 2.83(2012 年发布,太老了)为客户端添加了 SN​​I 支持,而 Mojolicious 6.40(一个月前)为所有 Web 服务器添加了它。

  • 您可以通过查看每个模块的更改文件来找到此信息,但是当我们在这里时,让我们获取 Net::SSLeay排序并不像安装模块那么简单。

    您必须注意的一些事项:
  • 您需要编译 perl、openssl 和 Net::SSLeay使用相同的工具,以便它们是二进制兼容的。

  • 使用 OPENSSL_PREFIX变量告诉cpan (以及它运行的东西)在哪里可以找到正确的 openssl .
     $ export OPENSSL_PREFIX=/usr/local/ssl
     $ cpan Net::SSLeay IO::Socket::SSL
    

    如果你已经有最新的Net::SSLeay但是针对旧版本的 openssl 编译,您可以强制安装模块以重新编译它,即使 cpan认为它是最新的:
     $ cpan -f Net::SSLeay IO::Socket::SSL
    

    IO::Socket::SSL有检查方法(在 1.84 中添加):
     $ /usr/local/ssl/bin/openssl version
     OpenSSL 1.0.1r  28 Jan 2016
     $ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->VERSION'
     2.024
     $ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->can_client_sni'
     1
    

    关于perl - 如何为 Mojolicious 设置 SNI 支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35498079/

    相关文章:

    perl - Perl 提供了哪些其他语言没有的编译时功能?

    Perl Mojolicious + PgAsync 插件——泄漏数据库连接?

    perl - 是否有一个 Perl 模块来监控电子邮件队列?

    perl - SSH 与 Perl 使用文件句柄,而不是 Net::SSH

    perl - 按多列对数据库中的现有用户进行排序

    perl - Mojolicious 如何修改 Perl 语法

    arrays - 在 perl 中为数组内的所有元素添加引号

    linux - PDF-API2无法执行

    PERL_LWP_SSL_VERIFY_HOSTNAME 设置为 0 不起作用

    jquery.get success 函数使用 Hypnotoad 和 Mojolicious 提前触发?