Pour qu’une autorité de certification soit pleinement opérationnelle, il faut que vos clients et serveurs vérifient que les certificats sont valables dans la liste de révocation des certificats (CRL ou Certificate Revocation List). Les autorités de certification fournissent des mécanismes pour partager ces listes simplement depuis les navigateurs et serveurs. Pour ce qui d’une autorité de certification interne, il vous appartient de mettre en place ce mécanisme pour vous assurer que si vous invalidez un client, celui-ci n’accèdera plus à vos application. Glassfish offre plusieurs mécanisme pour cela. Cet article présente comment intégrer un fichier de révocation des certificats dans le mécanisme d’authentification SSL de Glassfish.
Ajouter un fichier CRL à Glassfish
Pour ajouter un fichier CRL à votre configuration Glassfish v3, il faut modifier le fichier domain.xml
puis de redémarrer le domaine. La console ne permet pas d’ajouter ce paramétrage… Changez donc la clause protocol
correspondant au listener et ajoutez une balise ssl
avec un attribut crl-file
qui pointe vers la liste de révocation. La section doit ressembler à celle ci-dessous :
<protocol security-enabled="true" name="http-listener-2">
<http max-connections="250" default-virtual-server="server" server-name="">
<file-cache enabled="false" />
</http>
<ssl key-store="${com.sun.aas.instanceRoot}/config/keystore.jks"
ssl3-enabled="false" cert-nickname="s1as"
crl-file="${com.sun.aas.instanceRoot}/config/crl.pem" />
</protocol>
Vous remarquerez que ce paramétrage est différence de celui de la version Glassfish 2.1 décrit dans le blog de Kumar Jayanti.
Invalider un certificat et publier le fichier CRL
Une fois le CRL intégré à Glassfish, il vous appartient de le republier dans le cas où vous invalidez un certificat. Pour les besoins de notre exemple, nous allons invalider le certificat enregistré dans mon navigateur web dans mon article précédent. Pour cela, il s’agit de retrouver la référence au certificat dans l’autorité de certification ; Les informations restent disponibles dans le répertoire newcerts de notre CA :
$ cat demoCA/newcerts/B41D38BD499C6C47.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
b4:1d:38:bd:49:9c:6c:47
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=FR, ST=Paris, O=ArKZoYd, CN=CA
Validity
Not Before: Dec 5 15:07:20 2010 GMT
Not After : Dec 5 15:07:20 2011 GMT
Subject: C=FR, ST=Ile de France, L=Paris, O=ArKZoYd, CN=Greg
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:df:ef:15:a1:82:33:fc:1d:74:4c:71:14:b3:a4:
2e:60:06:b8:47:38:0a:7f:6d:ae:bc:f7:0c:45:cf:
7d:79:10:61:9a:a1:b6:d0:60:93:08:4c:c7:bd:90:
06:54:5f:bd:58:a1:5e:e5:3b:22:22:30:c9:7a:12:
5e:4a:da:bc:c8:87:71:60:dd:63:9e:13:92:f1:24:
b1:9c:49:92:87:38:49:ac:19:5b:8a:fd:c9:fb:8c:
a2:b6:3c:90:4d:e5:da:45:d5:67:e8:d1:cb:54:34:
ae:f7:c6:84:36:ed:2a:2f:52:e5:da:96:e1:f1:2a:
77:20:75:2b:06:b0:ab:c0:09
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
54:50:63:3F:81:57:1D:B4:61:F3:C3:36:94:83:A5:0C:8A:44:46:45
X509v3 Authority Key Identifier:
keyid:E0:FB:6B:4C:38:31:CA:A3:67:2C:82:28:86:A7:A9:E8:96:6A:AD:22
Signature Algorithm: sha1WithRSAEncryption
7e:f9:8a:f5:5b:a8:80:1b:77:ab:10:c5:4b:32:b6:61:25:d2:
f2:ff:3a:1a:65:07:be:62:38:c2:37:3d:02:f8:90:04:98:3f:
80:1f:9b:d3:b1:0b:aa:a1:c5:95:6d:5a:93:d7:ed:4d:7b:23:
6f:b5:1e:d1:a5:19:f5:b0:9b:20:f5:50:fe:65:79:37:ee:22:
72:d2:d3:8a:3a:21:5f:8c:af:13:de:4c:e5:21:e6:61:2e:75:
5a:09:b0:93:f5:62:1a:c2:7f:7c:5f:de:e5:65:2f:1a:55:d3:
7b:45:37:d2:d8:94:5c:c8:c4:68:55:1c:01:a2:96:55:31:ee:
3a:49
-----BEGIN CERTIFICATE-----
MIICizCCAfSgAwIBAgIJALQdOL1JnGxHMA0GCSqGSIb3DQEBBQUAMDwxCzAJBgNV
BAYTAkZSMQ4wDAYDVQQIEwVQYXJpczEQMA4GA1UEChMHQXJLWm9ZZDELMAkGA1UE
AxMCQ0EwHhcNMTAxMjA1MTUwNzIwWhcNMTExMjA1MTUwNzIwWjBWMQswCQYDVQQG
EwJGUjEWMBQGA1UECBMNSWxlIGRlIEZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEDAO
BgNVBAoTB0FyS1pvWWQxDTALBgNVBAMTBEdyZWcwgZ8wDQYJKoZIhvcNAQEBBQAD
gY0AMIGJAoGBAN/vFaGCM/wddExxFLOkLmAGuEc4Cn9trrz3DEXPfXkQYZqhttBg
kwhMx72QBlRfvVihXuU7IiIwyXoSXkravMiHcWDdY54TkvEksZxJkoc4SawZW4r9
yfuMorY8kE3l2kXVZ+jRy1Q0rvfGhDbtKi9S5dqW4fEqdyB1Kwawq8AJAgMBAAGj
ezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVk
IENlcnRpZmljYXRlMB0GA1UdDgQWBBRUUGM/gVcdtGHzwzaUg6UMikRGRTAfBgNV
HSMEGDAWgBTg+2tMODHKo2csgiiGp6nolmqtIjANBgkqhkiG9w0BAQUFAAOBgQB+
+Yr1W6iAG3erEMVLMrZhJdLy/zoaZQe+YjjCNz0C+JAEmD+AH5vTsQuqocWVbVqT
1+1NeyNvtR7RpRn1sJsg9VD+ZXk37iJy0tOKOiFfjK8T3kzlIeZhLnVaCbCT9WIa
wn98X97lZS8aVdN7RTfS2JRcyMRoVRwBopZVMe46SQ==
-----END CERTIFICATE-----
Pour invalider le certificat, il s’agit alors de lancer la commande openssl ca -revoke
comme ci-dessous :
$ openssl ca -revoke demoCA/newcerts/B41D38BD499C6C47.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Revoking Certificate B41D38BD499C6C47.
Data Base Updated
Pour republier la liste des certificats révoqués, utilisez la commande openssl ca -gencrl
et de l’envoyer sur le fichier configuré sur Glassfish :
$ openssl ca -gencrl -out /opt/glassfishv3/glassfish/domains/domain1/config/crl.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Et voilà, si vous essayez à nouveau l’application, votre accès est désormais bloqué ! Si vous utilisez l’autorité partir de plusieurs site, vous préfèrerez sans doute utiliser une méthode plus facile à déployer comme OSCP.
Pour en savoir plus sur l’utilisation de OpenSSL, je vous conseille ce wiki « intitulé Basics of Using OpenSSL »