2017-08-05 1 views
0

J'essaie d'obtenir une authentification mutuelle SSL entre deux serveurs LAMP.Authentification SSL mutuelle avec PHP SOAP

J'ai actuellement 3 serveurs. L'un étant le maître et les deux autres sont des clients qui font des appels SOAP.

Sur le maître et un client, j'ai installé des certificats SSL Comodo Postive. Je peux me connecter de ce client au maître et faire réussir l'authentification SSL.

Sur le second client, j'ai installé un certificat Lets Encrypt. J'ai obtenu le certificat racine de leur site Web (et vérifié également qu'il était correct en utilisant https://whatsmychaincert.com).

Ce serveur échoue l'appel de savon. J'ai vérifié l'erreur httpd journal sur le maître et il a ceci:

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

Ma compréhension est que cela signifie que le client ne vérifie pas le certificat du MASTER.

Si j'utilise cURL à partir de la ligne de commande sur ce client qui fonctionne. J'appelle cURL comme ceci:

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 

Dans ce cas combined.crt est un fichier à la fois la chaîne comodo et la chaîne letsencrypt concaténer.

Le fichier PHP ressemble à ceci:

<?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>"; 

?> 

Le fichier keycert.pem est une concaténation de la clé privée et le certificat.

Tous les serveurs sont Centos7 avec php 5.4.16

Répondre

0

je me suis dit celui-ci dehors (et par moi, je veux dire un gars du nom de Dino Ciuffetti). Je suis tombé sur this blog ce qui m'a aidé à comprendre un peu plus l'authentification mutuelle, mais je n'arrivais toujours pas à faire fonctionner les choses. J'ai posté l'affiche du blog, Dino, et il a eu la gentillesse de m'aider à faire fonctionner les choses. Lorsque j'ai essayé de configurer le troisième serveur avec LetsEncrypt par moi-même, les choses n'ont pas fonctionné comme prévu.

J'ai de nouveau tendu la main à Dino et il a remarqué que le répertoire du certificat n'autorisait pas l'accès en lecture apache. Une simple erreur mais je suppose que je regardais ce problème depuis trop d'heures.

En outre, à la fin du savon a été simplifié:

$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>";