当前位置: 首页 > 知识库问答 >
问题:

使用PHP SOAP进行相互SSL身份验证

解柏
2023-03-14

我正在尝试在两个LAMP服务器之间进行相互ssl身份验证。

我实际上有3台服务器。一个是主服务器,另外两个是对其进行SOAP调用的客户端。

在主客户端和一个客户端上,我安装了Comodo Postive SSL证书。我可以从该客户端连接到主客户端并成功进行SSL身份验证。

在第二个客户端上,我安装了一个Lets加密证书。我从他们的网站上获得了根证书(并使用https://whatsmychaincert.com).

此服务器使soap调用失败。我已经检查了主机上的httpd错误日志,它有以下内容:

SSL handshake interrupted by system [Hint: Stop button pressed in browser?!]

我的理解是,这意味着客户没有验证MASTER的证书。

如果我在这个客户机上使用命令行中的cURL,它就可以工作了。我这样称呼卷曲:

curl  -v --cert /etc/letsencrypt/live/ssl3.demoserver.co.za/cert.pem
  --cacert /etc/letsencrypt/live/ssl3.demoserver.co.za/combined.crt 
  --key /etc/letsencrypt/live/ssl3.demoserver.co.za/privkey.pem
      https://ssl2.demoserver.co.za/index.php

在这种情况下combined.crt是一个连接了comodo链和lets加密链的文件。

PHP文件如下所示:

<?php

$contextOptions = array(
'ssl' => array(
    'verify_peer'   => true,
    'cafile'        => '/etc/letsencrypt/live/ssl3.demoserver.co.za/combined.crt',
    'local_cert'        => '/etc/letsencrypt/live/ssl3.demoserver.co.za/keycert.pem',
    'verify_depth'  => 5,
    'disable_compression' => true,
    'SNI_enabled'         => true
)
);

$sslContext = stream_context_create($contextOptions);

$options2 = array(
    'uri' => 'https://ssl2.demoserver.co.za',
            'location' => 'https://ssl2.demoserver.co.za/Soap.php',
            'trace' => 1,
            'stream_context' => $sslContext
    );

$client = new SoapClient(NULL, $options2);
print "<span style=\"color:green;\">'".$client->GetData()."'<span>";

?>

密钥证书。pem文件是私钥和证书的串联。

所有服务器都是Centos7和php 5.4.16

共有1个答案

戚星腾
2023-03-14

我发现了这个问题(我指的是一个叫迪诺·丘菲蒂的家伙)。我偶然发现了这个博客,它帮助我更多地理解了相互认证,但我仍然无法完全让事情正常运转。

我邮寄了博客海报Dino,他很好心,帮我把事情办好了。当我试图用LetsEncrypt自己安装第三台服务器时,事情并没有如预期的那样工作。

我再次联系Dino,他发现证书的目录不允许apache读取访问。。一个简单的错误,但我想我已经盯着这个问题看了太多时间,看不到明显的问题。

此外,soap最终简化为:

$options2 = array(
    'uri' => 'https://ssl2.demoserver.co.za',
            'location' => 'https://ssl2.demoserver.co.za/Soap.php',
            'trace' => 1,
            'local_cert' => '/etc/letsencrypt/live/ssl3.demoserver.co.za/keycert.pem'
    );

$client = new SoapClient(NULL, $options2);
print "<span style=\"color:green;\">'".$client->GetData()."'<span>";
 类似资料:
  • 我正在尝试为相互身份验证设置ActiveMQ,以便客户端需要证书才能将消息传递给代理。我在代理上创建了一个密钥库和一个信任库,并导出了一个复制到客户端的证书。在客户端,我也做了同样的事情,尽管我使用的是NMS,所以我只使用导出的证书,我将其添加到代理的信任库中。我还将证书添加到另一个本地计算机可信根证书中。 代理的配置如下: ${activemq.base}/conf/login.config $

  • 问题内容: 是否有人对如何使用HTTPClient 4.0.1通过x509证书执行客户端身份验证有任何友好的提示? 感谢您的时间。 问题答案: 这是一些代码,助您一臂之力。该是包含客户端证书的对象。如果服务器使用的是自签名证书,或者包含的cacerts文件中的JVM认可的不是CA所签名的证书,则需要使用。否则,要使用默认的cacerts文件,请传递给truststore参数。

  • 在不限制客户端证书的情况下,TLS中的相互身份验证有什么用? 以下是我对使用TLS的客户端/相互身份验证的理解。 现在rfc5246表示如下 这不会实现任何身份验证正确吗?例如,如果我有一个服务器信任由世界各地受信任的CA签署的任何证书,那么为什么还要费心于客户端身份验证呢?

  • 我正在尝试为部署在Kubernetes集群中的应用程序启用基于TLS的相互身份验证。 希望将对应用程序的访问限制为只有那些具有受信任客户端证书的用户。 基于某些情况/条件,我还希望吊销特定用户的证书,以便该用户不再能够使用其证书访问应用程序。 我尝试在kuberentes ingress controller(基于nginx)中设置Mutual TLS,方法是添加以下注释。 是包含用于颁发客户端证

  • 我需要对Web服务(SOAP)应用SSL“相互身份验证”和对网页应用“单向身份验证”,以避免浏览器中存在证书。对于informationg,GUI和SOAP Webservices位于同一个war模块中。 我在Tomcat容器级别使用了SSL相互身份验证: clientAuth=“true”意味着在接受连接之前,客户端(从浏览器和web服务使用者)应该提供有效的证书链。我知道,通过使用client

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢