Comment configurer MapServer comme client pour accéder à un service via https

Revision:$Revision: 12521 $
Date:$Date: 2011-09-06 19:48:20 +0200 (Tue, 06 Sep 2011) $

Introduction

La documentation suivante explique comment configurer MapServer comme client pour accéder à un serveur WMS/WFS via une connection SSL sécurisée utilisant le protocole HTTPS. Il décrit les problèmes courants qu’un utilisateur peut rencontrer et comment les résoudre.

Prérequis

MapServer 5.4.1 et supérieur, compilé avec CURL. CURL doit être compilé avec le support SSL.

Installation par défaut (avec apt-get install, rpm, manuelle, etc)

Le fichier “CA bundle” de CURL devrait être situé dans le répertoire par défaut.

Vérifiez votre connection avec CURL en ligne de commande:

curl https://targethostname:port/gmap-demo/gmap75.phtml

Editez votre fichier map et ajoutez l’URL de connection WMS. Par exemple:

CONNECTION "https://domainname:port/cgi-bin/mapserv?map=/path/to/wms.map"
CONNECTIONTYPE WMS

Si la couche est correctement affichée, vous n’avez pas besoin de lire plus loin.

Installation non courante (commune avec ms4w et fgs

Si vous avez l’erreur suivante, cela veut dire que votre fichier “CA bundle” n’est pas trouvé.

curl https://localhost:port/gmap-demo/gmap75.phtml
curl: (77) error setting certificate verify locations:
  CAfile: /home/nsavard/fgsfull/share/curl/cacert.pem
  CApath: none

It may be caused by the CURL_CA_BUNDLE environment variable pointing to the wrong location or the CA bundle file not being present. Follow the steps below to correct either case.

Définir la variable d’environnement CURL_CA_BUNDLE qui pointe vers le fichier “bundle” (c’est à dire avec export CURL_CA_BUNDLE=/chemin/vers/mon-bundle-ca.ext où mon-bundle-ca.ext peut être cacert.pem ou ca-bundle.crt).

Téléchargez le fichier “CA bundle” “cacert.pem” trouvable sur http://curl.haxx.se/docs/caextract.html ou si vous avez les sources de CURL, vous pouvez créer le fichier “CA bundle” en exécutant “make ca-bundle” ou “make ca-firefox” (si vous avez Firefox et l’utilitaire certutil installé). Si vous faites le second choix, le fichier “bundle” sera nommé ca-bundle.crt et pourra être trouvé dans le répertoire lib dans le répertoire racine de CURL. Voir http://curl.haxx.se/docs/caextract.html pour plus de détails. Stockez ce fichier dans l’emplacement vers lequel pointe la variable d’environnement URL_CA_BUNDLE.

Vérifiez votre connection en utilisant CURL en ligne de commande

curl https://targethostname:port/gmap-demo/gmap75.phtml

Note

Si vous utilisez l’installation ms4w, osgeo4w ou fgs, ces installeurs doivent prendre en compte le problème pour vous.

Serveur distant avec un certificat SSL auto-signé

Si vous avez l’erreur suivante, cela veut dire que votre serveur distant utilise probablement un certificat SSL auto-signé et que le certificat du serveur n’est pas inclut dans votre fichier .ca_bundle (fichier d’une autorité certifiée)

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.

Pour obtenir le certificat du serveur distant, vous devez exécuter cette commande:

openssl s_client -connect domainname:port

Copiez tout depuis le tag “—–BEGIN CERTIFICATE—–” jusqu’au tag “—–END CERTIFICATE—–”. Copiez ce contenu à la fin de votre fichier mon-bundle-ca.ext.

Vérifiez votre connection avec CURL en ligne de commande:

curl https://targethostname:port/gmap-demo/gmap75.phtml

Note

Si vous avez l’erreur suivante, cela veut dire que le nom du domaine dans la requête vers URL ne correspond pas à celui qui a été déclaré quand vous avez créé le certificat du serveur distant.

curl: (51) SSL: certificate subject name 'domainname' does not match target host name 'domainname'

Vous devez utiliser exactement le même nom de domaine que celui qui apparaît dans l’invite de commande “Common Name” utilisée quand vous générez le certificat du serveur distant. Vous ne pouvez pas utiliser l’IP du serveur distant par exemple. Cela veut dire que l’URL suivante n’est pas acceptable.

CONNECTION "https://xxx.xxx.xxx.xxx:port/cgi-bin/mapserv?map=/path/to/wms.map"
CONNECTIONTYPE WMS