Как проверить токен метки времени RFC3161, который использует RSASSA-PSS
Мой провайдер меток времени недавно изменил использование rsaEncryption для подписи токена метки времени в rsassaPss ( см. Различие asn1parse здесь).
Перед изменением я использовал следующую команду в OpenSSL (v1.1.1a) для проверки токена метки времени:
$ openssl ts -verify -partial_chain -in token-rsaencryption.der -token_in \
> -digest bcbfcee484a9b243bafad6b8a43e0ddc1bf091837463e7c717495395eefbc2a6 \
> -CAfile cert.pem -untrusted cert.pem
Verification: OK
Using configuration from C:/Program Files/Git/mingw64/ssl/openssl.cnf
Однако команда больше не работает.
$ openssl ts -verify -partial_chain -in token-rsassapss.der -token_in \
> -digest 00017f0b41ce9649602a0218cd02ed0b0a3d93130329451cc782b7dfda79ce71 \
> -CAfile cert.pem -untrusted cert.pem
Verification: FAILED
Using configuration from C:/Program Files/Git/mingw64/ssl/openssl.cnf
14548:error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding:../openssl-1.1.1a/crypto/rsa/rsa_pk1.c:67:
14548:error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed:../openssl-1.1.1a/crypto/rsa/rsa_ossl.c:582:
14548:error:21071069:PKCS7 routines:PKCS7_signatureVerify:signature failure:../openssl-1.1.1a/crypto/pkcs7/pk7_doit.c:1037:
14548:error:2F06A06D:time stamp routines:TS_RESP_verify_signature:signature failure:../openssl-1.1.1a/crypto/ts/ts_rsp_verify.c:143:
Возможно, это связано с тем, что RSASSA-PSS пока не поддерживается при проверке меток времени с использованием OpenSSL.
Существуют ли другие варианты проверки токена RFC3161 с помощью rsassaPss?
Если вы хотите просмотреть файлы, в этом zip- файле содержатся как токены меток времени (rsaEncryption и rsassaPss), так и сертификат подписи.
1 ответ
Прошло некоторое время, но проблема осталась.
Суть в том, что RSASSA-PSS был реализован для функций API CMS_*, но не для PKCS7_*. Вы также можете увидеть это в командной строке. Поскольку токен временной метки в основном представляет собой подписанные данные PKCS#7/CMS для TSTInfo, вы можете проверить подпись исключительно:
$> openssl smime -verify -noverify -inform der -content foo -in foo.tst -out foo.tst.smime_verify
Verification failure
16432:error:21071065:PKCS7 routines:PKCS7_signatureVerify:digest failure:.\crypto\pkcs7\pk7_doit.c:1114:
16432:error:21075069:PKCS7 routines:PKCS7_verify:signature failure:.\crypto\pkcs7\pk7_smime.c:400:
$> openssl cms -verify -inform der -in foo.tst -noverify -out foo.tst.cms_verify
Verification successful
И проверка временных меток в конечном итоге сводится к...
Вы спрашивали об OpenSSL CLI, для которого, насколько мне известно, нет решения. Поскольку мы все равно используем API (и даже 1.0.2u до сих пор!^^), вот что я придумал:
я скопировал