J'utilise le client SCEP pour enrôler des certificats sur le serveur NDES. Si OpenSSL n'est pas en mode FIPS, tout fonctionne bien.
En mode FIPS, j'obtiens l'erreur suivante :
pkcs7_unwrap():pkcs7.c:708] error decrypting inner PKCS#7
139968442623728:error:060A60A3:digital envelope routines:FIPS_CIPHERINIT:disabled for fips:fips_enc.c:142:
139968442623728:error:21072077:PKCS7 routines:PKCS7_decrypt:decrypt error:pk7_smime.c:557:
C'est parce que le serveur NDES utilise l'algorithme DES pour crypter les paquets PKCS#7 renvoyés. J'ai utilisé le code de débogage suivant :
/* Copy enveloped data from PKCS#7 */
bytes = BIO_read(pkcs7bio, buffer, sizeof(buffer));
BIO_write(outbio, buffer, bytes);
p7enc = d2i_PKCS7_bio(outbio, NULL);
/* Get encryption PKCS#7 algorithm */
enc_alg=p7enc->d.enveloped->enc_data->algorithm;
evp_cipher=EVP_get_cipherbyobj(enc_alg->algorithm);
printf("evp_cipher->nid = %d\n", evp_cipher->nid);
La dernière chaîne s'imprime toujours :
evp_cipher->nid = 31
défini dans openssl-1.0.1c/include/openssl/objects.h
#define SN_des_cbc "DES-CBC"
#define LN_des_cbc "des-cbc"
#define NID_des_cbc 31
J'utilise l'algorithme 3DES pour le cryptage des requêtes PKCS7 dans mon code (pscep.enc_alg = (EVP_CIPHER *)EVP_des_ede3_cbc()) et le serveur NDES accepte ces requêtes, mais il renvoie toujours une réponse cryptée avec DES.
Puis-je configurer le serveur Windows NDES pour qu'il utilise l'algorithme Triple DES (3DES) pour le cryptage des réponses PKCS#7 ?