Vérification d’une signature CPS avec OpenSSL
La CPSFacade et son proxy REST Devbox-Santé-CPS expose un endpoint permettant de signer tout document. Mais une fois signé le contenu, comment en vérifier sa signature ?
Signature avec DevBox-Santé CPS
Supposons le texte à signer suivant stocker dans le fichier message.json
:
{"message": "hello DevBox-Santé"}
Pour le signer vous allez utiliser le proxy cps de la DevBox-santé sur le port 9999, en CURL ça donne :
curl -X POST "http://localhost:9999/cps/sign/for/SIGNATURE/with/SHA256WithRSA" -H "accept: */*" -H "Content-Type: application/json" --data @message.json --output signature.txt
C’est tout ce qu’il vous faut pour obtenir une signature et le fichier signature.txt
contiendra la signature du message.json
.
Vérification avec OpenSSL
Pour cela vous devez obtenir le certificat publique de la carte CPS :
curl -X GET "http://localhost:9999/cps/certificate/SIGNATURE" -H "accept: */*" --output certificat.cer
Le ficher certificat.cer
contenant le certificat ressemble à cela :
MIIIkjCCBnqgAwIBAgIQY9r/ ... S80hoFHQ=
Pour qu’il plaise à OpenSSL, il faut lui dire ce que c’est en rajoutant les lignes dans le fichier :
-----BEGIN CERTIFICATE-----
MIIIkjCCBnqgAwIBAgIQY9r/ ... S80hoFHQ=
-----END CERTIFICATE-----
Dans le certificat nous pouvons extraire la clé publique :
openssl x509 -in certificat.cer -pubkey -noout > pubkey.pem
et on obtient un fichier pubkey.pem
:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjipTM5ec9lNhfI280/S
YdDIHE0DNPS+ofB24EN4QX669BkAdefzZtAwEPfR29V+zLwRj0tgjGADXVAp/1rT
F30YPumCLwO2YYXgtx3tkQTQxadb02MIJ447VJPBPr5pqsTc4dcCnLcn/QAgVvdk
bIU2vRwa7Xkve/npoHhMnSboCCfuHcoP1WNagIZuy7v8EcNiqAXf88bt9qLjMXSE
Ff7lV5OhroRlSdQ06BHJokXWtEjbrV+TLDT0HuA0XaAfGlHFL2vJnifrhZXklTmr
ZSUceRSCleTxR0PR8pITpa7yTXz84dB33q0XrCti12YLG7oruJZ064YEzDCr+SJ7
iQIDAQAB
-----END PUBLIC KEY-----
Donc maintenant nous avons le texte, une signature, et une clé publique, il ne reste plus qu’à vérifier que la signature soit conforme :
$ openssl dgst -sha256 -verify pubkey.pem -signature signature.txt message.json
Verified OK
Et voilà.