https://dev-eole.ac-dijon.fr/https://dev-eole.ac-dijon.fr/favicon.ico2020-12-02T15:43:48ZEnsemble Ouvert Libre ÉvolutifDistribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1500962020-12-02T15:43:48ZDaniel Dehennin
<ul></ul><p>Le certificat présent dans le magasin de <strong><code>ca-certificates</code></strong> sur un Eolebase 2.8.0 :</p>
<pre>
root@eolebase:~# openssl x509 -in /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem -noout -subject -issuer -startdate -enddate -fingerprint -ext subjectKeyIdentifier,authorityKeyIdentifier,basicConstraints
subject=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
issuer=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
notBefore=Feb 1 00:00:00 2010 GMT
notAfter=Jan 18 23:59:59 2038 GMT
SHA1 Fingerprint=2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E
X509v3 Subject Key Identifier:
53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB
X509v3 Basic Constraints: critical
CA:TRUE
</pre>
<p>Le certificat de Renater <a href="https://services.renater.fr/_media/tcs/geant_ov_rsa_ca_4_usertrust_rsa_certification_authority.pem" class="external">fourni en ligne</a> contient 2 certificats :</p>
<ul>
<li>La racine, dont l’empreinte SHA1 ne correspond pas à celle du magasin <strong><code>ca-certificates</code></strong> car elle est sursignée par Comodo<br /><pre>
root@eolebase:~# openssl x509 -in /root/userturst.crt -noout -subject -issuer -startdate -enddate -fingerprint -ext subjectKeyIdentifier,authorityKeyIdentifier,basicConstraints
subject=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
issuer=C = GB, ST = Greater Manchester, L = Salford, O = Comodo CA Limited, CN = AAA Certificate Services
notBefore=Mar 12 00:00:00 2019 GMT
notAfter=Dec 31 23:59:59 2028 GMT
SHA1 Fingerprint=D8:9E:3B:D4:3D:5D:90:9B:47:A1:89:77:AA:9D:5C:E3:6C:EE:18:4C
X509v3 Authority Key Identifier:
keyid:A0:11:0A:23:3E:96:F1:07:EC:E2:AF:29:EF:82:A5:7F:D0:30:A4:B4
X509v3 Subject Key Identifier:
53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB
X509v3 Basic Constraints: critical
CA:TRUE
</pre></li>
<li>Le certificat GEANT Vereniging<br /><pre>
root@eolebase:~# openssl x509 -in /root/geant-ov-rsa-ca-4.crt -noout -subject -issuer -startdate -enddate -fingerprint -ext subjectKeyIdentifier,authorityKeyIdentifier,basicConstraints
subject=C = NL, O = GEANT Vereniging, CN = GEANT OV RSA CA 4
issuer=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
notBefore=Feb 18 00:00:00 2020 GMT
notAfter=May 1 23:59:59 2033 GMT
SHA1 Fingerprint=C2:82:6E:26:6D:74:05:D3:4E:F8:97:62:63:6A:E4:B3:6E:86:CB:5E
X509v3 Authority Key Identifier:
keyid:53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB
X509v3 Subject Key Identifier:
6F:1D:35:49:10:6C:32:FA:59:A0:9E:BC:8A:E8:1F:95:BE:71:7A:0C
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
</pre></li>
</ul>
<p>Le certificat intermédiaire de <strong>GEANT</strong> est bien valide pour la CA <strong>USERTrust RSA</strong> du magasin :</p>
<pre>
root@eolebase:~# certtool --load-ca-certificate /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem --verify --verify-profile ultra --infile /root/geant-ov-rsa-ca-4.crt
Loaded CAs (1 available)
Subject: CN=GEANT OV RSA CA 4,O=GEANT Vereniging,C=NL
Issuer: CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US
Checked against: CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US
Signature algorithm: RSA-SHA384
Output: Verified. The certificate is trusted.
Chain verification output: Verified. The certificate is trusted.
</pre> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1500972020-12-02T15:46:19ZDaniel Dehennin
<ul></ul><p>Il faudrait vérifier si le certificat de l’utilisateur peut-être validé avec le certificat du magasin.</p>
<p>Je pense que dans ce cas, le certificat devrait avoir la concaténation du certificat final et de l’autorité intermédiaire.</p> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1500982020-12-02T15:46:27ZDaniel Dehennin
<ul><li><strong>Statut</strong> changé de <i>Nouveau</i> à <i>En cours</i></li><li><strong>Assigné à</strong> mis à <i>Daniel Dehennin</i></li></ul> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1516962021-01-20T09:55:06ZJoël Cuissinatjoel.cuissinat@ac-dijon.fr
<ul><li><strong>Tâche parente</strong> changé de <i>#31204</i> à <i>#31492</i></li></ul> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1520852021-02-01T14:20:42ZJoël Cuissinatjoel.cuissinat@ac-dijon.fr
<ul><li><strong>Tâche parente</strong> changé de <i>#31492</i> à <i>#31587</i></li></ul> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1525582021-02-19T14:38:52ZDaniel Dehennin
<ul></ul><p>Dans les <a href="https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices" class="external">bonnes pratiques de SSLlabs</a> il est fortement conseillé de <a href="https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices#21-use-complete-certificate-chains" class="external">toujours utiliser une chaîne complète dans le certificat</a>.</p>
<p>Je suis en train de faire des tests en construisant une autorité de certification et une sous-autorité :</p>
<ol>
<li><strong><code>CA-ROOT</code></strong></li>
<li><strong><code>CA-SUB1</code></strong></li>
<li><strong><code>zephir.ac-test.fr</code></strong></li>
</ol> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1525722021-02-19T16:12:36ZDaniel Dehennin
<ul></ul><ul class="toc right"><li><a href="#Préparation-dune-chaîne-de-certification">Préparation d’une chaîne de certification</a><ul><li><a href="#Génération-dune-autorité-de-certification-racine">Génération d’une autorité de certification racine</a></li><li><a href="#Génération-dune-autorité-de-premier-niveau">Génération d’une autorité de premier niveau</a></li><li><a href="#Génération-dun-certificat-serveur">Génération d’un certificat serveur</a></li><li><a href="#Génération-dun-PKCS12">Génération d’un PKCS#12</a></li></ul>
</li><li><a href="#Test-du-certificat">Test du certificat</a><ul><li><a href="#Installer-le-certificat-sur-le-serveur">Installer le certificat sur le serveur</a></li><li><a href="#Tester-depuis-un-client">Tester depuis un client</a></li></ul></li></ul>
<p>Utilisation de l’outil <strong><code>certtool</code></strong> fourni par <strong><code>gnutls-bin</code></strong> pour tester une chaîne de certificat non EOLE.</p>
<p>Utilisation de 2 machines :</p>
<ul>
<li><strong><code>aca.zephir-2.7.2-instance-default</code></strong></li>
<li><strong><code>aca.eolebase-2.7.2-instance-default</code></strong></li>
</ul>
<a name="Préparation-dune-chaîne-de-certification"></a>
<h3 >Préparation d’une chaîne de certification<a href="#Préparation-dune-chaîne-de-certification" class="wiki-anchor">¶</a></h3>
<a name="Génération-dune-autorité-de-certification-racine"></a>
<h4 >Génération d’une autorité de certification racine<a href="#Génération-dune-autorité-de-certification-racine" class="wiki-anchor">¶</a></h4>
<ol>
<li>Il faut un modèle de configuration pour certtool<br /><pre>
~# cat > ca-root.template <<EOF
cn = "Test CA ROOT"
dc = "ac-test"
dc = "fr"
ca
cert_signing_key
expiration_days = 730
EOF
</pre></li>
<li>Il faut maintenant générer une clef privée<br /><pre>
~# certtool --generate-privkey > ca-root.key
</pre></li>
<li>Nous pouvons maintenant générer le certificat de l’autorité de certificat<br /><pre>
~# certtool --generate-self-signed --load-privkey ca-root.key --template ca-root.template --outfile ca-root.crt
</pre></li>
</ol>
<a name="Génération-dune-autorité-de-premier-niveau"></a>
<h4 >Génération d’une autorité de premier niveau<a href="#Génération-dune-autorité-de-premier-niveau" class="wiki-anchor">¶</a></h4>
<ol>
<li>Il faut un modèle de configuration pour certtool<br /><pre>
~# cat > ca-sub1.template <<EOF
cn = "Test CA SUB1"
dc = "ac-test"
dc = "fr"
ca
cert_signing_key
expiration_days = 730
EOF
</pre></li>
<li>Il faut maintenant générer une clef privée<br /><pre>
~# certtool --generate-privkey > ca-sub1.key
</pre></li>
<li>Nous pouvons maintenant générer le certificat <strong><code>CA-SUB1</code></strong>, signé par <strong><code>CA-ROOT</code></strong><br /><pre>
~# certtool --generate-certificate --load-ca-certificate ca-root.crt --load-ca-privkey ca-root.key --template ca-sub1.template --load-privkey ca-sub1.key --outfile ca-sub1.crt
</pre></li>
</ol>
<a name="Génération-dun-certificat-serveur"></a>
<h4 >Génération d’un certificat serveur<a href="#Génération-dun-certificat-serveur" class="wiki-anchor">¶</a></h4>
<ol>
<li>Il faut un modèle de configuration pour certtool<br /><pre>
~# cat > zephir.template <<EOF
cn = zephir
dc = ac-test
dc = fr
tls_www_server
encryption_key
signing_key
dns_name = zephir.ac-test.fr
EOF
</pre></li>
<li>Il faut maintenant générer une clef privée<br /><pre>
~# certtool --generate-privkey > ca-sub1.key
</pre></li>
<li>Nous pouvons maintenant générer le certificat <strong><code>zephir</code></strong>, signé par <strong><code>CA-SUB1</code></strong><br /><pre>
~# certtool --generate-certificate --load-ca-certificate ca-sub1.crt --load-ca-privkey ca-sub1.key --template zephir.template --load-privkey zephir.key --outfile zephir.crt
</pre></li>
</ol>
<a name="Génération-dun-PKCS12"></a>
<h4 >Génération d’un PKCS#12<a href="#Génération-dun-PKCS12" class="wiki-anchor">¶</a></h4>
<p>Nous pouvons créer un fichier PKCS#12 avec les fichiers créés précédemment :<br /><pre>
~# certtool --load-ca-certificate ca-sub1.crt --load-certificate zephir.crt --load-privkey zephir.key --to-p12 --p12-name zephir --outder --outfile zephir.p12
Generating a PKCS #12 structure...
Loading private key list...
Loaded 1 private keys.
Enter password:
Confirm password:
</pre></p>
<a name="Test-du-certificat"></a>
<h3 >Test du certificat<a href="#Test-du-certificat" class="wiki-anchor">¶</a></h3>
<a name="Installer-le-certificat-sur-le-serveur"></a>
<h4 >Installer le certificat sur le serveur<a href="#Installer-le-certificat-sur-le-serveur" class="wiki-anchor">¶</a></h4>
<ol>
<li>Mettre en place la CA<br /><pre>
~# cp ca-root.crt /etc/ssl/local_ca/
</pre></li>
<li>Créer la chaîne certificat serveur<br /><pre>
~# cat zephir.crt ca-sub.crt > /etc/ssl/certs/zephir-chain.crt
</pre></li>
<li>Copier de la clef privée du serveur<br /><pre>
~# cp zephir.key /etc/ssl/private/ && chmod 600 /etc/ssl/private/zephir.key
</pre></li>
<li>Configurer le serveur via GenConfig
<ol>
<li><strong><code>Général > Certificat SSL</code></strong> ⮕ <strong><code>manuel</code></strong></li>
<li><strong><code>Général > Chemin du fichier contenant le certificat SSL</code></strong> ⮕ <strong><code>/etc/ssl/certs/zephir-chain.crt</code></strong></li>
<li><strong><code>Général > Chemin du fichier contenant la clé privée du certificat SSL</code></strong> ⮕ <strong><code>/etc/ssl/private/zephir.key</code></strong></li>
<li><strong><code>Général > Chemin du fichier contenant la chaîne de certification</code></strong> ⮕ <strong><code>/etc/ssl/local_ca/ca-root.crt</code></strong></li>
</ol>
</li>
<li>Exécuter <strong><code>reconfigure</code></strong></li>
</ol>
<a name="Tester-depuis-un-client"></a>
<h4 >Tester depuis un client<a href="#Tester-depuis-un-client" class="wiki-anchor">¶</a></h4>
<p>Depuis <strong><code>aca.eolebase-2.7.2-instance-default</code></strong></p>
<ol>
<li>Test sans modification<br /><pre>
~# openssl s_client -host zephir.ac-test.fr -port 8070
CONNECTED(00000003)
depth=1 CN = Test CA SUB1, DC = ac-test, DC = fr
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
0 s:/CN=zephir/DC=ac-test/DC=fr
i:/CN=Test CA SUB1/DC=ac-test/DC=fr
1 s:/CN=Test CA SUB1/DC=ac-test/DC=fr
i:/CN=Test CA ROOT/DC=ac-test/DC=fr
---
[…]
</pre></li>
<li>Installation de <strong><code>CA-ROOT</code></strong><br /><pre>
~# cp ca-root.crt /usr/local/share/ca-certificates/ && update-ca-certificates
</pre></li>
<li>Test de connection<br /><pre>
~# openssl s_client -host zephir.ac-test.fr -port 8070
CONNECTED(00000003)
depth=2 CN = Test CA ROOT, DC = ac-test, DC = fr
verify return:1
depth=1 CN = Test CA SUB1, DC = ac-test, DC = fr
verify return:1
depth=0 CN = zephir, DC = ac-test, DC = fr
verify return:1
---
Certificate chain
0 s:/CN=zephir/DC=ac-test/DC=fr
i:/CN=Test CA SUB1/DC=ac-test/DC=fr
1 s:/CN=Test CA SUB1/DC=ac-test/DC=fr
i:/CN=Test CA ROOT/DC=ac-test/DC=fr
2 s:/CN=Test CA ROOT/DC=ac-test/DC=fr
i:/CN=Test CA ROOT/DC=ac-test/DC=fr
---
[…]
</pre></li>
</ol> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1525922021-02-22T10:48:28ZDaniel Dehennin
<ul></ul><p>Voici ma proposition de modification pour le second paragraphe de la section <a href="https://eole.ac-dijon.fr/documentations/2.8/completes/HTML/EOLE/co/07_certificats.html" class="external"><strong><code>Certificat de type manuel</code></strong></a> (toutes versions)</p>
<pre><code class="diff syntaxhl"><span class="CodeRay"><span class="line comment">diff -u --label \#\<buffer\ orig\> --label \#\<buffer\ new\> /tmp/buffer-content-fKxXNs /tmp/buffer-content-SMhUsz</span>
<span class="line head"><span class="head">--- </span><span class="filename">#<buffer orig></span></span>
<span class="line head"><span class="head">+++ </span><span class="filename">#<buffer new></span></span>
<span class="line change"><span class="change">@@</span> -1 +1,10 <span class="change">@@</span></span>
<span class="line delete"><span class="delete">-</span>Dans le cas d'un certificat signé par une autorité externe, il faut copier le certificat de la CA en question dans /etc/ssl/local_ca/ afin qu'il soit pris en compte automatiquement (non nécessaire pour les certificats de l'IGC nationale</span>
<span class="line insert"><span class="insert">+</span>Dans le cas d'un certificat signé par une autorité externe, il faut copier le certificat de la CA en question dans /etc/ssl/local_ca/ afin qu'il soit pris en compte automatiquement (non nécessaire pour les certificats de l'IGC nationale).</span>
<span class="line insert"><span class="insert">+</span></span>
<span class="line insert"><span class="insert">+</span>Si la chaîne de certification du serveur contient une ou plusieurs autorités intermédiaires, vous devez concaténer le certificat du serveur avec les certificats des autorités intermédiaires dans l’ordre de la chaîne de certification vers l’autorité racine, par exemple, pour une chaîne de certification suivante :</span>
<span class="line insert"><span class="insert">+</span></span>
<span class="line insert"><span class="insert">+</span>1. CA-ROOT</span>
<span class="line insert"><span class="insert">+</span>2. CA-SUB1 signée par CA-ROOT</span>
<span class="line insert"><span class="insert">+</span>3. CA-SUB2 signée par CA-SUB1</span>
<span class="line insert"><span class="insert">+</span>4. mon-serveur signé par CA-SUB1</span>
<span class="line insert"><span class="insert">+</span></span>
<span class="line insert"><span class="insert">+</span>cat mon-serveur.crt ca-sub2.crt ca-sub1.crt > /etc/ssl/cert/mon-serveur.crt</span>
</span></code></pre> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1530862021-03-09T09:09:36ZJoël Cuissinatjoel.cuissinat@ac-dijon.fr
<ul><li><strong>Tâche parente</strong> changé de <i>#31587</i> à <i>#31715</i></li></ul> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1531232021-03-09T14:44:00ZDaniel Dehennin
<ul><li><strong>Statut</strong> changé de <i>En cours</i> à <i>Nouveau</i></li><li><strong>Assigné à</strong> <del><i>Daniel Dehennin</i></del> supprimé</li></ul> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1531332021-03-10T08:49:22ZJoël Cuissinatjoel.cuissinat@ac-dijon.fr
<ul></ul><p>Daniel Dehennin a écrit :</p>
<blockquote>
<p>Voici ma proposition de modification pour le second paragraphe de la section <a href="https://eole.ac-dijon.fr/documentations/2.8/completes/HTML/EOLE/co/07_certificats.html" class="external"><strong><code>Certificat de type manuel</code></strong></a> (toutes versions)</p>
<p>[...]</p>
</blockquote>
<ul>
<li>Ajout d'une sous-partie <strong>Certificats intermédiaires</strong> avec un bloc exemple</li>
<li>Suppression de l'ancienne partie <strong>Certificats intermédiaires</strong> qui avait le contenu suivant :</li>
</ul>
<blockquote>
<p>En attendant que la prise en compte des certificats intermédiaires soit automatisée pour l'ensemble des services de base (fixme <a class="issue tracker-8 status-12 priority-4 priority-default closed parent" title="Bac à idée: Prise en compte des chaînes de certification (AC root + intermédiaires) par NGINX/EoleSSO/... (Classée sans suite)" href="https://dev-eole.ac-dijon.fr/issues/13362">#13362</a>), les manipulations nécessaires pour éviter des avertissements dans les navigateurs sont documentées dans la page wiki suivante : <a class="external" href="https://dev-eole.ac-dijon.fr/projects/modules-eole/wiki/Gestion_certificats">https://dev-eole.ac-dijon.fr/projects/modules-eole/wiki/Gestion_certificats</a></p>
</blockquote> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1531342021-03-10T08:49:44ZJoël Cuissinatjoel.cuissinat@ac-dijon.fr
<ul><li><strong>Statut</strong> changé de <i>Nouveau</i> à <i>Résolu</i></li><li><strong>Assigné à</strong> mis à <i>Joël Cuissinat</i></li><li><strong>% réalisé</strong> changé de <i>0</i> à <i>100</i></li></ul> Distribution EOLE - Tâche #31238: Vérifier la CA Renater et la documentation sur les CA intermédiareshttps://dev-eole.ac-dijon.fr/issues/31238?journal_id=1531662021-03-10T15:29:08ZDaniel Dehennin
<ul><li><strong>Statut</strong> changé de <i>Résolu</i> à <i>Fermé</i></li><li><strong>Restant à faire (heures)</strong> mis à <i>0.0</i></li></ul><p>Je trouve ça très bien.</p>