Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何使用具有mojolicious的中间证书_Perl_Ssl Certificate_Mojolicious - Fatal编程技术网

Perl 如何使用具有mojolicious的中间证书

Perl 如何使用具有mojolicious的中间证书,perl,ssl-certificate,mojolicious,Perl,Ssl Certificate,Mojolicious,Mojolicious允许我在启动应用程序时指定ssl证书和密钥: > ./myapp.pl prefork --listen 'https://*:8485&cert=my.crt&key=my.key' 我正试图用rapidssl证书来实现这一点。 连接到此服务会导致wget非常不满意: $ wget https://example.com:8485/ --2016-06-22 09:50:49-- https://example.com:8485/ Resolvi

Mojolicious允许我在启动应用程序时指定ssl证书和密钥:

> ./myapp.pl prefork --listen 'https://*:8485&cert=my.crt&key=my.key'
我正试图用rapidssl证书来实现这一点。 连接到此服务会导致wget非常不满意:

$ wget https://example.com:8485/
--2016-06-22 09:50:49--  https://example.com:8485/
Resolving example.com (example.com)... 1.3.2.4
Connecting to example.com (example.com)|1.3.2.4|:8485... connected.
ERROR: cannot verify example.com's certificate, issued by `/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3':
  Unable to locally verify the issuer's authority.
To connect to example.com insecurely, use `--no-check-certificate'.
没什么大不了的,因为当我在其他应用程序中使用rapidssl证书时 还要指定一个中间证书。因此,我也尝试通过将中间证书连接到站点证书来添加此内容,但这对结果没有影响

我还尝试将中间证书和根证书放在一个单独的文件中,并从以下内容开始:

> ./myapp.pl prefork --listen 'https://*:8485&cert=my.crt&key=my.key&ca=myca.crt'
但结果同样令人失望:

error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

请告知。

如果您希望服务器不仅向客户端发送叶(服务器)证书,还向客户端发送任何其他(中间)证书,则只需按正确顺序将这些证书添加到证书文件中即可。这意味着你的my.crt应该是这样的

----BEGIN CERTIFICATE-----
MII... the leaf certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MII... the first intermediate certificate, i.e. the one which signed the leaf cert
-----END CERTIFICATE-----
...

根据您的第二次尝试,应该可以工作。我确实阅读了文档:)或者我认为…您不需要指定CA参数,因为CA参数是客户端CA,而不是服务器CA(用于验证客户端证书,但您只有服务器)。尝试运行此命令:
openssl s_server-cert cert=my.crt-key my.key-accept 8485
和另一个控制台中的客户端
openssl s_client-connect example.com:8485
。并查看输出(证书是否有效)。Mojolicious仅适用于有效证书。如果您的证书没有中间证书,则需要连接两个证书。