Rechercher sur ce site...

Catégorie : ipsec

Générer des certificats pour Ipsec avec Openssl

Dans un précédant article, j'ai pu configurer un serveur ipsec dans ipfire, soit mettre en place un serveur Ipsec/Strongswan et des clients Windows 7, Debian 7 ou Iphone, tout par le programme "ipsec pki" . Dans cet article, j'utilise uniquement le programme Openssl. Pour simplifier le processus de création des certificats d’autorités, client et serveur, je m'appuie sur mes scripts stockés sur Github.

A/ En résumé :

Avant de se lancer, je tiens à vous signaler qu'il ne faut surtout pas mettre des caractères avec des accents. En effet, la connexion VPN ne se fera pas à cause d'un différent sur les jeux de caractères (ANSI/UTF8). Les scripts suivants permettent de modifier les fichier de configuration à la volé et de générer tous les certificats.

[pcsh lang="bash" user="jbsky" repos="jbsky" path_id="rootfs/root/openssl" revision="master" tab_size="4" hl_lines="" provider="github"/]

En détail

Petit rappel: Openssl s'appuie sur le fichier /etc/ssl/openssl.cnf par défaut, cependant, il est possible de spécifier un autre fichier avec l'otion [-config $FILE]. Un certificat est composé de 2 fichiers, une clé privé et une clé publique. Dans le cas d'une configuration IpSec, le client doit avoir le drapeau  clientAuth  et serverAuth et doivent être signé par la même autorité.

B/ Le fichier de configuration d'OpenSSL.

B.1/ Génération du certificat d'autorité

Dans un premier temps, le champs [ca] dans le fichier openssl.cnf désigne l'autorité par défaut, soit [ROOT].

[pcsh lang="bash" user="jbsky" repos="jbsky" path_id="ipfire/rootfs/etc/ssl/openssl.cnf" revision="master" tab_size="4" hl_lines="" provider="github"/]
  • Policy_match sont les règles définies pour autoriser la création d'un sous certificat d'autorité.
  • req_distinguished_name normalise les champs composants le certificat. Les champs terminant par _default permettent à OpenSSL de suggérer une valeur lors de la génération du certificat. Je vous invite à renseigner la localité, le mail, la ville et le nom de l'organisation, le reste diffère.
  • Bien definir pour le certificat d'autorité la variable keyUsage avec les drapeaux critical, digitalSignature, cRLSign, keyCertSign.

Le fichier openssl.cnf renseigné à ce point, il est tout à fait possible de définir son certificat d'autorité.

[pcsh lang="bash" user="jbsky" repos="jbsky" path_id="ipfire/rootfs/usr/local/sbin/caroot" revision="master" tab_size="4" hl_lines="" provider="github"/] Ensuite, lançons le premier script.

caroot

B.2/ Génération d'un sous certificat d'autorité

Pour simplifier les choses,  je préfère utiliser un autre fichier de configuration pour ipsec.

[pcsh lang="bash" user="jbsky" repos="jbsky" path_id="ipfire/rootfs/etc/ssl/ipsec.cnf" revision="master" tab_size="4" hl_lines="" provider="github"/]

Script pour générer un sous-certificat d'autorité.

[pcsh lang="bash" user="jbsky" repos="jbsky" path_id="ipfire/rootfs/usr/local/sbin/casec" revision="master" tab_size="4" hl_lines="" provider="github"/]

Pour générer le certificat d'autorité pour Ipsec, lançons le deuxième script.

casec

B.3/ Génération du certificat serveur.

DNS.1 est l'étiquette qui doit correspondre absolument à l’adresse IP ou FQDN du serveur dans le fichier ipsec.cnf.

  • extentedKeyUsage prend la valeur serverAuth, soit l'option pour que le certificat soit exploitable par un serveur ipsec.
  • Il est possible de générer plusieurs certicats pour autant de serveur.

Puis, pour générer le certificat serveur:

[pcsh lang="bash" user="jbsky" repos="jbsky" path_id="ipfire/rootfs/usr/local/sbin/secsrv" revision="master" tab_size="4" hl_lines="" provider="github"/] Puis, lançons le troisième script.

[bash]secsrv[/bash]

B.4/ Génération du certificat client.

Dans le fichier ipsec.cnf, à noté que extentedKey prend la valeur clientAuth, soit l'option pour que le certificat soit exploitable par un client ipsec.

Il est possible de générer plusieurs certificats serveurs pour le même client sous la même autorité.
Donc, pour générer le certificat client:

[pcsh lang="bash" user="jbsky" repos="jbsky" path_id="ipfire/rootfs/usr/local/sbin/secacces" revision="master" tab_size="4" hl_lines="" provider="github"/]

Enfin, lançons le dernier script.

[bash]secacces[/bash]

Configurer un serveur ipsec dans ipfire

Note: on copie et on colle directement dans le shell.

Dans cette page, vous trouvez la procédure pour configurer un serveur ipsec dans ipfire, et mettre en place différent clients comme iphones, Windows (>7 ) et Linux.

tunnel vpn

A) Mise en place du Serveur Ipsec

A.1/ Préparation du shell

Je vous propose de définir quelques variables volatiles, à modifier à sa convenance.

[code lang="shell"] TAB="$(printf '\t')"
NOM_DOMAINE=example.com #peut-être une adresse IP
WORKGROUP='Internet Group'
PAYS=FR
EMAIL=user@${NOM_DOMAINE}
STATE='Ma Région'
TOWN='Ma ville'
NOM_CLIENT=Nom_de_Client_a_choisir
IP_VPN_CLIENT=10.0.0.1
PASSWORD=Motdepasse
#IP_GREEN=`ifconfig green0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
# NET_GREEN=${IP_GREEN%.*}.0/24
NET_GREEN=0.0.0.0/0 # permet l’accès du VPN à n'importe quel réseau à restreindre si besoin
PATH_INSTALL=/var/ipfire[/code]

!Impératif! NOM_DOMAINE renseigne le nom commun(CN), soit le nom de domaine par lequel votre réseau est accessible Il est possible de mettre une adresse IP.
NET_GREEN est la zone où le VPN va avoir accès, ici dans la zone verte.
IP_VPN_CLIENT est l'adresse IP arbitraire assigné au client.

Pour la suite, y a plus qu'à lire et à copier/coller.

A.2/ Génération de l'autorité de certification (cacert)

Une autorité de certification délivre des certificats en deux parties, une clef privée que le client ou le serveur garde confidentiel et une clef public qui est diffusé à travers le réseau. Le serveur a obligatoirement son jeu de clef.

[code lang="shell"]ipsec pki --gen --outform pem > ${PATH_INSTALL}/private/cakey.pem
ipsec pki --self --in ${PATH_INSTALL}/private/cakey.pem --dn "C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, OU=CA, CN=${NOM_DOMAINE}, emailAddress=${EMAIL}" --ca --outform pem > ${PATH_INSTALL}/ca/cacert.pem
[/code]

Il faut également renseigné un fichier setting situé dans /var/ipfire/vpn/ pour que les informations correspondent avec l'interface Web d'Ipfire. Attention aux droit d'utilisateur, tout est en nobody!

[code lang="shell"]cat << EOF >${PATH_INSTALL}/vpn/settings
ROOTCERT_EMAIL=${EMAIL}
ROOTCERT_CITY=${TOWN}
ROOTCERT_STATE=${STATE}
ENABLED=off
ROOTCERT_OU=CA
ROOTCERT_HOSTNAME=${NOM_DOMAINE}
RW_NET=
VPN_IP=%defaultroute
ROOTCERT_COUNTRY=FR
VPN_DELAYED_START=0
ROOTCERT_ORGANIZATION=${WORKGROUP}
EOF[/code]

A.3/ Génération du certificat hôte (hostcert)

Attention au CN, comme expliqué plus haut, il doit absolument correspondre au nom de domaine ou à l'adresse IP par lequel vous êtes accessible via le réseau (Internet ou Intranet).

[code lang="shell"]ipsec pki --gen --outform pem > ${PATH_INSTALL}/private/hostkey.pem
ipsec pki --pub --in ${PATH_INSTALL}/private/hostkey.pem | ipsec pki --issue --cacert ${PATH_INSTALL}/ca/cacert.pem --cakey ${PATH_INSTALL}/private/cakey.pem --dn "C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}" --san="${NOM_DOMAINE}" --flag serverAuth --flag ikeIntermediate --outform pem > ${PATH_INSTALL}/certs/hostcert.pem
cat << EOF > /etc/ipsec.user.secrets
: RSA /var/ipfire/private/hostkey.pem
EOF[/code]

Sous l'onglet Services->Ipsec dans l'interface web d'Ipfire, le certificat d'autorité (CA) et le certificat hôte doit être visible et consultable.

A.4 Préparation client côté Ipfire

Pour mettre en place un client, notre serveur Ipsec aura été préalablement renseigné par deux fichiers.

  • Le premier fichier, /etc/ipsec/ipsec.conf (qui inclus le fichier /etc/ipsec/ipsec.user.conf), définit la configuration gauche/droite (local relatif/distant relatif).
  • Le deuxième fichier, /etc/ipsec.secret (qui inclus le fichier /etc/ipsec.user.secrets), définit les informations nécessaire pour l'authentification, à savoir, la clé du certificat du serveur et les identifiants avec le mot de passe correspondant.

Lors de l'arrêt et du démarrage du serveur ipsec par les pages web, les fichiers sont réécrit sauf les "user". Comme les clients sont créés manuellement, il est nécessaire de placer leur configuration dans /etc/ipsec.user.conf et /etc/ipsec.user.secrets.

La ligne de commande suivante renseigne un fichier situé dans /var/ipfire/vpn/ afin que l'interface web d'ipfire affiche les informations sur les clients VPN dans la page Service->IPSEC et Status->Connexion.

[code lang="shell"] echo $((`wc -l ${PATH_INSTALL}/vpn/config | awk '{ print $1}'`+1)),off,${NOM_CLIENT},CN=${NOM_CLIENT}.${NOM_DOMAINE} OU=Client VPN,host,cert,,,,${NET_GREEN},,,${IP_VPN_CLIENT}/32,,,,,,,,,,,,,,,,,,,,>>${PATH_INSTALL}/vpn/config
[/code]

 

A.4.1) Windows 7 : Attention, c'est soit via certificat clé privé/public ou via eap-mschapv2.

A.4.1.a) Via certificat clé privé/public

Il est demandé un mot de passe lors de la génération du fichier .p12. Il sera demandé au client lors de l'importation du certificat.

[code lang="shell"]ipsec pki --gen --outform pem > ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem
ipsec pki --pub --in ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem | ipsec pki --issue --cacert ${PATH_INSTALL}/ca/cacert.pem --cakey ${PATH_INSTALL}/private/cakey.pem --dn "C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}" --flag serverAuth --flag ikeIntermediate --outform pem > ${PATH_INSTALL}/certs/${NOM_CLIENT}cert.pem

# Fichier p12 pour notre client Windows
openssl pkcs12 -export -inkey ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem -in ${PATH_INSTALL}/certs/${NOM_CLIENT}cert.pem -name "${NOM_CLIENT}" -certfile ${PATH_INSTALL}/ca/cacert.pem -caname "${NOM_DOMAINE}" -out ${PATH_INSTALL}/certs/${NOM_CLIENT}.p12[/code]

 

Ici, on renseigne uniquement /etc/ipsec.user.conf.

[code lang="shell"]cat << EOF >> /etc/ipsec.user.conf
conn ${NOM_CLIENT}
${TAB}keyexchange=ikev2
${TAB}left=%any
${TAB}leftsubnet=${NET_GREEN}
${TAB}leftcert=hostcert.pem
${TAB}leftfirewall=yes
${TAB}right=%any
${TAB}rightsourceip=${IP_VPN_CLIENT}
${TAB}eap_identity=${NOM_CLIENT}
${TAB}leftid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}"
${TAB}rightid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}"
EOF
[/code]
A.4.1.b) Via eap-mschapv2

Ici, on renseigne /etc/ipsec.user.conf et /etc/ipsec.user.secret.

[code lang="shell"]cat << EOF >> /etc/ipsec.user.conf
conn ${NOM_CLIENT}
${TAB}keyexchange=ikev2
${TAB}authby=rsasig
${TAB}left=%any
${TAB}leftsubnet=${NET_GREEN}
${TAB}leftauth=pubkey
${TAB}leftcert=hostcert.pem
${TAB}leftfirewall=yes
${TAB}right=%any
${TAB}rightsourceip=${IP_VPN_CLIENT}
${TAB}rightauth=eap-mschapv2
${TAB}rightsendcert=never
${TAB}eap_identity=%any
${TAB}auto=add
${TAB}leftid=%any # Si défini comme ci dessous, la connexion n'est pas accepté la premier fois.
${TAB}# leftid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}"
${TAB}rightid=%any
EOF
cat << EOF >> /etc/ipsec.user.secrets
${NOM_CLIENT} : EAP "${PASSWORD}"
EOF[/code]

A.4.2) Iphone

Il est demandé un mot de passe lors de la génération du fichier .p12. Il sera demandé au client lors de l'importation du certificat.

[code lang="shell"]ipsec pki --gen --outform pem > ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem
ipsec pki --pub --in ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem | ipsec pki --issue --cacert ${PATH_INSTALL}/ca/cacert.pem --cakey ${PATH_INSTALL}/private/cakey.pem --dn "C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}" --flag serverAuth --flag ikeIntermediate --outform pem > ${PATH_INSTALL}/certs/${NOM_CLIENT}cert.pem

# Fichier p12 pour notre client iphone
openssl pkcs12 -export -inkey ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem -in ${PATH_INSTALL}/certs/${NOM_CLIENT}cert.pem -name "${NOM_CLIENT}" -certfile ${PATH_INSTALL}/ca/cacert.pem -caname "${NOM_DOMAINE}" -out ${PATH_INSTALL}/certs/${NOM_CLIENT}.p12[/code]

 

Ici, on renseigne /etc/ipsec.user.conf et /etc/ipsec.user.secret.

[code lang="shell"]cat << EOF >> /etc/ipsec.user.conf
conn ${NOM_CLIENT}
${TAB}keyexchange=ikev1
${TAB}authby=xauthrsasig
${TAB}xauth=server
${TAB}left=%defaultroute
${TAB}leftsubnet=${NET_GREEN}
${TAB}leftcert=hostcert.pem
${TAB}leftfirewall=yes
${TAB}right=%any
${TAB}rightsourceip=${IP_VPN_CLIENT}
${TAB}rightcert=${NOM_CLIENT}cert.pem
${TAB}leftid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}"
${TAB}rightid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}"
${TAB}pfs=no
${TAB}auto=add
EOF

cat << EOF >> /etc/ipsec.user.secrets
${NOM_CLIENT} : XAUTH "${PASSWORD}"
EOF[/code]

 

A.4.3) Debian : Attention, c'est soit via certificat clé privé/public ou via eap-mschapv2.

A.4.3.a) Via certificat clé privé/public

Il est demandé un mot de passe lors de la génération du fichier .p12. Il sera demandé au client lors de l'importation du certificat.

[code lang="shell"]ipsec pki --gen --outform pem > ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem
ipsec pki --pub --in ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem | ipsec pki --issue --cacert ${PATH_INSTALL}/ca/cacert.pem --cakey ${PATH_INSTALL}/private/cakey.pem --dn "C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}" --flag serverAuth --flag ikeIntermediate --outform pem > ${PATH_INSTALL}/certs/${NOM_CLIENT}cert.pem

# Fichier p12 pour notre client Debian
openssl pkcs12 -export -inkey ${PATH_INSTALL}/private/${NOM_CLIENT}key.pem -in ${PATH_INSTALL}/certs/${NOM_CLIENT}cert.pem -name "${NOM_CLIENT}" -certfile ${PATH_INSTALL}/ca/cacert.pem -caname "${NOM_DOMAINE}" -out ${PATH_INSTALL}/certs/${NOM_CLIENT}.p12[/code]

 

Ici, on renseigne uniquement /etc/ipsec.user.conf.

[code lang="shell"]cat << EOF >> /etc/ipsec.user.conf

conn ${NOM_CLIENT}
${TAB}keyexchange=ikev2
${TAB}left=%any
${TAB}leftsubnet=${NET_GREEN}
${TAB}leftcert=hostcert.pem
${TAB}leftfirewall=yes
${TAB}right=%any
${TAB}rightsourceip=${IP_VPN_CLIENT}
${TAB}rightfirewall=yes
${TAB}leftid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}"
${TAB}rightid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}"
${TAB}auto=add
EOF

[/code]

 

A.4.3.b) Via eap-mschapv2

Ici, on renseigne /etc/ipsec.user.conf et /etc/ipsec.user.secret.

[code lang="shell"]cat << EOF >> /etc/ipsec.user.conf
conn ${NOM_CLIENT}
${TAB}keyexchange=ikev2
${TAB}authby=rsasig
${TAB}left=%any
${TAB}leftsubnet=${NET_GREEN}
${TAB}leftauth=pubkey
${TAB}leftcert=hostcert.pem
${TAB}leftfirewall=yes
${TAB}right=%any
${TAB}rightsourceip=${IP_VPN_CLIENT}
${TAB}rightauth=eap-mschapv2
${TAB}rightsendcert=never
${TAB}eap_identity=${NOM_CLIENT}
${TAB}auto=add
${TAB}leftid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}"
${TAB}rightid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}"
${TAB}rightfirewall=yes
EOF

cat << EOF >> /etc/ipsec.user.secrets
'C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}' - 'C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}' : EAP "${PASSWORD}"
EOF[/code]

B) Mise en place côté client

Se connecter sur la page d'ipfire Service->IPSEC avec le futur client, activer le serveur et télécharger soit le fichier p12 ou que le certificat d'autorité dans le cas de eap-mschapv2.

B.1.a) Windows 7: Import de certificat

Dans la console mmc, ajouter à la racine de la console le logiciel certificat(ordinateur) et se placer dans Certificat->Personnel->Certificat(ordinateur).

ipsecVia eap-mschapv2 : importer le fichier cacert.pem puis déplacer sous Certificats (ordinateur local) -> Autorité de certification racines de confiance -> Certificats.

Via certificat clé privé/public : Importer le fichier .p12, renseigner le mot de passe choisit lors de la génération du certificat et déplacer cacert.pem sous Certificats (ordinateur local) -> Autorité de certification racines de confiance -> Certificats.

B.1.b) Windows 7: Création de la connexion

Dernière étape, Ouvrir le centre réseau et partage, configurer une nouvelle connexion ou un nouveau réseau, Connexion à votre espace de travail. Dans l'adresse Internet, renseigner ce que vous avez mis au début dans les variables en nom de domaine et valider.

Via eap-mschapv2: dans la fenêtre suivante renseigné le nom d'utilisateur et le mot de passe, si problème vérifié que l'authentification est EAP-MSCHAP version 2.

Via certificat clé privé/public: si problème vérifié que l'authentification utilise les certificats de l'ordinateur.

B.2) Iphone

Avec l'iphone, il suffit de se connecter à la page du serveur et de télécharger le certificat racine et le certificat correspondant à l'appareil. Il est demandé le mot de passe lors de la génération du certificat.

Dernière étape, dans réglage->Général->VPN, Ajouter une configuration VPN... Sous l'onglet IPSec, le serveur correspond au CN du serveur VPN, le compte est le nom du client et le mot de passe. Utiliser le certificat et dans la liste selectionner celui que vous venez d'ajouter. Revenir au menu VPN et lancer la connexion.

B.3) Debian

Pour commencer il faut s'assurer que le paquet strongswan soit bien installé et dans le cas de mschapv2, le paquet libcharon-extra-plugins. Il faut redéfinir exactement les mêmes variables volatiles qu'au début.

[code lang="shell"]NOM_DOMAINE=example.com #peut-être une adresse IP
WORKGROUP='Internet Group'
PAYS=FR
EMAIL=user@${NOM_DOMAINE}
STATE='Ma Région'
TOWN='Ma ville'
NOM_CLIENT=Nom_de_Client_a_choisir
IP_VPN_CLIENT=10.0.0.1
PASSWORD=Motdepasse
NET_GREEN=0.0.0.0/0 # permet l’accès du VPN à n'importe quel réseau à restreindre si besoin
[/code]

Importer directement depuis le shell.

[code lang="shell"]scp ipfire:/etc/ipsec.d/cacerts/cacert.pem /etc/ipsec.d/cacerts/cacert.pem
scp ipfire:/etc/ipsec.d/certs/${NOM_CLIENT}cert.pem /etc/ipsec.d/certs/${NOM_CLIENT}cert.pem
scp ipfire:/var/ipfire/private/${NOM_CLIENT}key.pem /etc/ipsec.d/private/${NOM_CLIENT}key.pem
[/code]
B.3.a) Via certificat clé privé/public

Ici, on renseigne uniquement /etc/ipsec.user.conf.

[code lang="shell"]cat << EOF >> /etc/ipsec.conf
conn ${NOM_CLIENT}
${TAB}auto=add
${TAB}keyexchange=ikev2
${TAB}leftcert=${NOM_CLIENT}cert.pem
${TAB}leftfirewall=yes
${TAB}leftsourceip=${IP_VPN_CLIENT}
${TAB}right=${NOM_DOMAINE}
${TAB}rightsubnet=${NET_GREEN}
${TAB}rightfirewall=yes
${TAB}rightid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}"
${TAB}leftid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}"
EOF
cat << EOF >> /etc/ipsec.secrets
: RSA /etc/ipsec.d/private/${NOM_CLIENT}key.pem
EOF
[/code]

B.3.b) Via eap-mschapv2

Ici, on renseigne /etc/ipsec.user.conf et /etc/ipsec.user.secret.

[code lang="shell"]cat << EOF >> /etc/ipsec.conf
conn ${NOM_CLIENT}
${TAB}auto=add
${TAB}keyexchange=ikev2
${TAB}leftfirewall=yes
${TAB}leftsourceip=${IP_VPN_CLIENT}
${TAB}right=${NOM_DOMAINE}
${TAB}rightsubnet=${NET_GREEN}
${TAB}leftid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}"
${TAB}rightid="C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}"
${TAB}rightauth=pubkey
${TAB}leftauth=eap
${TAB}eap_identity=${NOM_CLIENT}
EOF
cat << EOF >> /etc/ipsec.secrets
'C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_DOMAINE}, OU=Serveur VPN, emailAddress=${EMAIL}' - 'C=${PAYS}, ST=${STATE}, L=${TOWN}, O=${WORKGROUP}, CN=${NOM_CLIENT}.${NOM_DOMAINE}, OU=Client VPN, emailAddress=${EMAIL}' : EAP "${PASSWORD}"
EOF[/code]

On redemarre le serveur ipsec et lance la connexion ipsec.

[code lang="shell"]/etc/init.d/ipsec restart
ipsec up ${NOM_CLIENT}[/code]

Attention, par ssh, si la connexion se fait bien, vous perdez le contrôle de la session.