Ce document décrit le déploiement d'une plate forme open source permettant à des utilisateurs de se connecter à un réseau WiFi à l'aide de certificats fournis par une autorité de certification auto-signée.
Ces certificats permettront une authentification forte des utilisateurs auprès d'un serveur RADIUS. Dans un premier temps, nous décrirons le déploiement d'une PKI, d'un script permettant d'automatiser la gestion de certificats et, enfin, d'un serveur RADIUS afin d'authentifier l'utilisateur qui souhaite accéder au réseau sans fil.
[...] echo "Etape 1 Signature par le certificat root CA" /usr/local/ssl/bin/openssl ca -config ca-server-cert.cnf -days 365 -in csr_server/ $nom_fichier.csr -out certs_server/$nom_fichier.pem -notext # Une fois notre certificat crée , nous n'avons plus besoin de la requête.Nous pouvons donc la supprimer. rm csr_server/$nom_fichier.csr echo "Etape 2 Enregistrement du certificat dans la base LDAP" # Il faut maintenant envoyer notre certificat serveur à LDAP pour la publication # Nous convertissons tout d'abord notre PEM en DER car LDAP ne prends que le format DER. [...]
[...] N'hésitez pas à les consulter pour de plus amples informations. Ressources et liens utiles Ouvrages LDAP Administration Système de Gerald Carter Edition O'REILLY PKI Open Source Déploiement et Administration de Christophe Cachat et David Carella - Edition O'REILLY Authentification Réseau avec RADIUS de Serge Bordères et Nat Makarévitch Edition EYROLLES Tutoriaux LDAP http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html http://www-lor.int-evry.fr/~michel/ : ''TLS/SSL pour LDAP'' de Michel Gardie SSH http://doc.fedora-fr.org/wiki/SSH_:_Authentification_par_cl%C3%A9 OCSP http://blog.guiguiabloc.fr/index.php/2009/01/05/gestion-dune-pki-installation-dun-repondeur-ocsp/ 36 Annexes Les fichiers de configuration pour OpenSSL req-server-cert.cnf req-user-cert.cnf ca-server-cert.cnf ca-user-cert.cnf ca-manager.cnf root-ca-cert.cnf req-ocsp-cert.cnf ca-ocsp-cert.cnf Le script CA Créer un nouveau certificat serveur svg dans LDAP) Créer un nouveau certificat utilisateur svg dans LDAP) Convertir un certificat utilisateur au format PKCS#12 Visualiser un certificat X.509 Visualiser un fichier au format PKCS#12 Générer la liste de révocation (CRL) Visualiser la liste de révocation Vérifier la validité d'un certificat Révoquer un certificat Signer certificat serveur Signer certificat utilisateur Créer un certificat OSCP Vérifier si un certificat est revoqué ou non grâce au serveur OCSP Le script AE Créer une requête de certificat pour serveur Créer une requête de certificat pour utilisateur Les fichiers de configuration pour LDAP slapd.conf racine.ldif ajout_crl.ldif ajout_user_pki.ldif ajout_user_radius.ldif Le fichier de configuration pour OCSP ocspd.conf Les fichiers de configuration pour les clients LDAP ldap.conf ldaprc Les fichiers de configuration pour RADIUS clients.conf eap.conf default ldap Les fichiers de configuration pour le DNS named.conf.local named.conf.options db.masociete.lan rev.masociete.lan Le fichier de configuration pour DHCP dhcpd.conf 37 Les fichiers de configuration pour OpenSSL req-server-cert.cnf [ req ] default_bits = 1024 default_keyfile = private/server.key default_md = sha1 distinguished_name = req_distinguished_name req_extensions = server_req string_mask = nombstr [ req_distinguished_name ] countryName countryName_default countryName_min countryName_max = Country Name * letter code) = FR stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Province localityName localityName_default = Locality Name city) = City organizationName = Organization Name * company) organizationName_default = Company organizationalUnitName = Organizational Unit Name section) organizationalUnitName_default = Section commonName commonName_max emailAddress emailAddress_max [ server_req ] basicConstraints = critical, CA:false subjectKeyIdentifier = hash keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth #nsComment = "Certificate Signing Request" #subjectAltName = email:copy = Common Name * www.domain.com) = 64 = E-Mail Address = req-user-cert.cnf [ req ] default_bits = 1024 default_keyfile = private/user.key default_md = sha1 distinguished_name = req_distinguished_name req_extensions = user_req string_mask = nombstr [ req_distinguished_name ] countryName countryName_min countryName_max stateOrProvinceName localityName organizationName organizationalUnitName commonName commonName_max emailAddress emailAddress_max [ user_req ] basicConstraints = critical, CA:false subjectKeyIdentifier = hash keyUsage = digitalSignature, nonRepudiation, keyEncipherment extendedKeyUsage = clientAuth, emailProtection nsCertType = client, email #nsComment = "Certificate Signing Request" subjectAltName = email:copy = Country Name letter code) = State or Province Name (full name) = Locality Name city) = Organization Name company) = Organizational Unit Name section) = Common Name * your name) = 64 = E-Mail Address * = ca-server-cert.cnf # # OpenSSL : CA > Server Certificate # [ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = /etc/pki/tls # Where everything is kept certs = $dir/certs_server # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # The database index file new_certs_dir = $dir/newcerts_server # Where the new certs are kept certificate = $dir/ca.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl/crl.pem # The current CRL file private_key = $dir/private/ca.key # The CA private key RANDFILE = $dir/private/.rand # The private random number file default_days = 365 default_crl_days= 30 default_md = sha1 preserve = no # How long to certify for # How long before next CRL # Which MD to use # Keep passed DN ordering # The extentions to add to the cert # Don't copy extensions from request # Default policy x509_extensions = server_cert copy_extensions = none policy = policy_anything [ server_cert ] basicConstraints = critical, CA:false authorityKeyIdentifier = keyid:always subjectKeyIdentifier = hash keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth nsComment = "Certificate issued by Company" #subjectAltName = email:copy [ policy_anything ] countryName = supplied stateOrProvinceName = optional localityName = optional organizationName = supplied organizationalUnitName = optional commonName = supplied emailAddress = optional 40 ca-user-cert.cnf # # OpenSSL : CA > User Certificate [ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = /etc/pki/tls # Where everything is kept certs = $dir/certs_user # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # The database index file new_certs_dir = $dir/newcerts_user # Where the new certs are kept certificate = $dir/ca.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl/crl.pem # The current CRL file private_key = $dir/private/ca.key # The CA private key RANDFILE = $dir/private/.rand # The private random number file default_days = 365 default_crl_days= 30 default_md = sha1 preserve = no # How long to certify for # How long before next CRL # Which MD to use # Keep passed DN ordering # The extentions to add to the cert # Don't copy extensions from request # Default policy x509_extensions = user_cert copy_extensions = none policy = policy_anything [ user_cert ] basicConstraints = critical, CA:false authorityKeyIdentifier = keyid:always subjectKeyIdentifier = hash keyUsage = digitalSignature, nonRepudiation, keyEncipherment extendedKeyUsage = clientAuth, emailProtection nsCertType = client, email nsComment = "Certificate issued by Company" subjectAltName = email:copy #issuerAltName = issuer:copy [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = supplied 41 ca-manager.cnf # # OpenSSL : CA Manager [ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = /etc/pki/tls # Where everything is kept certs = $dir/certs_user,$dir/certs_server # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # The database index file new_certs_dir = $dir/newcerts_user , $dir/newcerts_server # Where the new certs are kept certificate = $dir/ca.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl/crl.pem # The current CRL file private_key = $dir/private/ca.key # The CA private key RANDFILE = $dir/private/.rand # The private random number file default_days = 7305 default_crl_days= 15 default_md = sha1 preserve = no # How long to certify for # How long before next CRL # Which MD to use # Keep passed DN ordering 42 root-ca-cert.cnf # # OpenSSL : Root CA Certificate # [ req ] default_bits = 4096 default_keyfile = private/ca.key default_md = sha1 distinguished_name = req_distinguished_name x509_extensions = rootca_cert string_mask = nombstr [ req_distinguished_name ] countryName countryName_default countryName_min countryName_max = Country Name * letter code) = FR stateOrProvinceName = State or Province Name * (full name) stateOrProvinceName_default = Province localityName localityName_default = Locality Name * city) = City organizationName = Organization Name * company) organizationName_default = Company organizationalUnitName = Organizational Unit Name section) #organizationalUnitName_default = Section commonName #commonName_default commonName_max emailAddress emailAddress_max [ rootca_cert ] basicConstraints = critical, CA:true subjectKeyIdentifier = hash keyUsage = critical, keyCertSign, cRLSign #nsCertType = sslCA, emailCA, objCA #nsComment = "Certificate issued by Company" #subjectAltName = email:copy = Common Name * Root CA name) = Company Root CA = 64 = E-Mail Address = req-ocsp-cert.cnf [ req ] default_bits = 1024 default_keyfile = private/ocsp.key default_md = sha1 distinguished_name = req_distinguished_name req_extensions = ocsp_req string_mask = nombstr [ req_distinguished_name ] countryName countryName_default countryName_min countryName_max = Country Name * letter code) = FR stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Province localityName localityName_default = Locality Name city) = City organizationName = Organization Name * company) organizationName_default = Company organizationalUnitName = Organizational Unit Name section) organizationalUnitName_default = Section commonName commonName_max emailAddress emailAddress_max [ ocsp_req ] basicConstraints = critical, CA:false subjectKeyIdentifier = hash keyUsage = digitalSignature, nonRepudiation extendedKeyUsage = OCSPSigning #nsComment = "Certificate Signing Request" #subjectAltName = email:copy = Common Name * Company OCSP Signing ID) = 64 = E-Mail Address = ca-ocsp-cert.cnf [ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = /etc/pki/tls # Where everything is kept certs = $dir/certs_server # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # The database index file new_certs_dir = $dir/newcerts_server # Where the new certs are kept certificate = $dir/ca.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl/crl.pem # The current CRL file private_key = $dir/private/ca.key # The CA private key RANDFILE = $dir/private/.rand # The private random number file default_days = 730 default_crl_days= 30 default_md = sha1 preserve = no # How long to certify for # How long before next CRL # Which MD to use # Keep passed DN ordering # The extentions to add to the cert # Don't copy extensions from request # Default policy x509_extensions = ocsp_cert copy_extensions = none policy = policy_anything [ ocsp_cert ] basicConstraints = critical, CA:false authorityKeyIdentifier = keyid:always subjectKeyIdentifier = hash keyUsage = digitalSignature, nonRepudiation extendedKeyUsage = OCSPSigning nsComment = "Certificate issued by Company" #subjectAltName = email:copy [ policy_anything ] countryName = supplied stateOrProvinceName = optional localityName = optional organizationName = supplied organizationalUnitName = optional commonName = supplied emailAddress = optional 45 Le script CA Créer un nouveau certificat serveur svg dans LDAP) result=`nb_elt csr_server` #s'il y a au moins une requête dans le dossier csr_server alors if [ $result -gt 0 ] then echo "Liste des requêtes serveurs:" #on affiche la liste des requêtes de certificat serveur ls csr_server echo "Entrer le nom de la requête serveur pour la vérification et la création du certificat serveur:" read nom_fichier #On demande d'entrer le nom de la requête serveur pour la verification et la création du certificat serveur #tant que le nom de la requête est éronnée on demande de ressaisir le nom du csr. [...]
[...] Connexion sous Windows 7 Il faut, tout d'abord, installer le certificat dans le magasin de certificat Windows. Pour cela, il suffit de double cliquer sur le certificat en question au format '.p12', puis de suivre les instructions à écran. La passphrase du client sera demandée afin de déchiffrer sa clef privée. Il est prudent de vérifier si le certificat est bien installé sur la machine et dans le bon magasin de certificat. Pour cela : - Cliquer sur 'Démarrer'/'Exécuter' - Taper 'mmc ' et appuyer sur la touche 'Entrée' - Cliquer sur 'Fichier/Ajouter ou supprimer des composants logiciels enfichables' Figure 12 : Processus mmc (Microsoft Management Console) 28 - Sélectionner l'entrée 'Certificats' dans la colonne de gauche - Cliquer sur 'Ajouter ' - Sélectionner 'Mon compte d'utilisateur ' - Cliquer sur 'Terminer ' - Cliquer sur 'OK ' Figure 13 : Arborescence des magasins de certificats - Dans l'arborescence, vérifier le contenu des entrées 'Personnel' et 'Autorités de certification racines de confiance'. [...]
[...] Parmis toutes les méthodes EAP disponibles, nous allons utiliser EAP/TLS, en effet, maintenant qu'une PKI est disponible, les clients pourront s'authentifier à l'aide de certificats. De plus EAP/TLS est un standard ouvert proposé par l'IETF. Le logiciel FreeRADIUS est disponible en libre téléchargement sur le site officiel du projet à l'adresse http://freeradius.org/download.html. Pour le compiler, suivre la procédure : root@ldap:~# cd ~ root@ldap:~# gunzip freeradius-server- 2.1 .10.tar.gz root@ldap:~# tar xvf freeradius-server- 2.1 .10.tar root@ldap:~# cd freeradius-server- 2.1 .10/ root@ldap:~# ./configure root@ldap:~# make root@ldap:~# make test root@ldap:~# make install Le logiciel s'installe, par défaut, dans le répertoire /usr/etc/raddb/. [...]
[...] Figure 11 : Configuration du chiffrement de la connexion sans fil Sauver et appliquer les modifications Les clients Nous avons réalisés des tests avec Windows 7 et la version 10.10 d'Ubuntu. Nous allons décrire la procédure pour qu'un client puisse se connecter à votre réseau sans fil à l'aide d'un certificat utilisateur, préalablement généré par l'autorité de certification. Pour faciliter la connexion du client, il est préférable de convertir son certificat au format '.p12' à l'aide du script présenté précédemment. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture