Perl的Mojolicious支持Server Name Identification (SNI),其中一些Web服务器使用一个HTTPS证书来托管多个站点。我正在研究一个没有设置使用它的系统,并且谷歌搜索不会发现任何使过程清晰且各个部分明显的东西。 StackOverflow问题Perl LWP GET or POST to an SNI SSL URL提到了一些事情。
那么,我需要做的一切是什么?
答案 0 :(得分:6)
首先,它不支持SNI的Mojolicious(或LWP或其他)。这是IO::Socket::SSL,但不是真的,因为它是Net::SSLeay,但并不是因为它是openssl的版本。
--prefix
选项将其配置为在新目录中安装,这样您就不会打扰已有的内容以及其他依赖的内容。您可以通过查看每个模块的更改文件来查找此信息,但是当我们来到这里时,让我们Net::SSLeay对其进行排序&#39 ;不像安装模块那么简单。
你需要注意的一些事情:
使用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
答案 1 :(得分:-1)
不是问题的直接答案,而是更好的解决方案。
根据我作为~400域共享托管管理员的经验,在Apache中配置SSL更方便,并且在mod_perl2下运行Mojolicious。
从长远来看,将太多(网络)配置放入应用程序总是很痛苦。在许多情况下,多域应用程序也会变得不方便。
Apache中的配置允许通过标准脚本进行管理,例如:从letsencrypt续订SSL证书。
当然,其他设置可能有充分的理由和特殊要求值得额外的工作。