Как сделать самозаверяющий сертификат RSA_PSS_RSAE с помощью Openssl - PullRequest
0 голосов
/ 30 января 2020

Я хотел бы сделать сертификат следующим образом. rsassaPss как алгоритм подписи и rsaEncryption как ключевой алгоритм Publi c.

Certificate:
    Data:
        Version: 3 (0x2)
        ....
    Signature Algorithm: rsassaPss
         Hash Algorithm: sha1 (default)
         Mask Algorithm: mgf1 with sha1 (default)
         Salt Length: 20 (default)
         Trailer Field: 0xbc (default)
        ....
        Subject: .....
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            .....

Я пробовал следующее, но оба результата одинаковы.

1

openssl genpkey -algorithm RSA-PSS -out test1\ca2.key.pem -pkeyopt rsa_pss_keygen_md:sha1 -pkeyopt rsa_pss_keygen_mgf1_md:sha1 -pkeyopt rsa_pss_keygen_saltlen:20
openssl req -x509 -new -nodes -key test1\ca2.key.pem -days 1024 -out test1\ca2.crt.pem 

2

openssl req -new -newkey rsa-pss -pkeyopt rsa_keygen_bits:2048 -sigopt  rsa_mgf1_md:sha256 -passout pass:123456 -sha256
openssl x509 -req -in test3\rootreq.pem -passin pass:123456 -sha256 -days 14600 -extensions v3_cn -signkey test3\rootkey.pem -out test3\rootcert.pem 

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 01 февраля 2020

Чтобы получить то, что вы показываете, создайте ключевой файл как v1.5, но подпишите сертификат с помощью PSS. Для самоподписанного сертификата:

# in separate steps either of
openssl genrsa 2048 >keyfile 
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 >keyfile
# in either case add encryption if desired; your Q is inconsistent about that

# then
openssl req -new -x509 -key keyfile -sigopt rsa_padding_mode:pss -sha1 -sigopt rsa_pss_saltlen:20 -out certfile
# add options for subject, days, extensions, or other config as desired
# for 1.0.0 & 1.0.1 -sha1 was default for hash and can be omitted;
# in all versions MGF1 hash defaults to data hash
# but saltlen defaults to 0xEA -- I'm not sure why -- and must be set

# in one step
openssl req -new -x509 -newkey rsa:2048 -keyout keyfile -sigopt rsa_padding_mode:pss -sha1 -sigopt rsa_pss_saltlen:20 -out certfile

Тем не менее, я в основном согласен с комментарием Мэтта; это не обязательно то, что вам нужно для подписи TLS1.3 rsa_pss_rsae, если это ваша реальная цель. Во-первых, подпись на самоподписанном root или другом сертификате привязки вообще не способствует безопасности и обычно даже не проверяется; RFC8446 4.2.3 явно разрешает эту подпись не удовлетворять sigalgs. (Хотя я думаю, что это ошибка; учитывая оставшуюся часть spe c, было бы более разумно извинить ее от sigalgs или sigalgs_cert , в зависимости от того, что применимо.)

Второе, если это была подписью, которая имеет значение - для сертификата, выданного (отдельным) CA, что OpenSSL может также сделать, если вы хотите, но по-другому - тогда использование SHA-1 было бы очень плохо. RFC8446 позволяет сигнатурам сертификатов использовать SHA-1 только в качестве крайней меры - для любого алгоритма publickey (RSAv1.5, RSA-PSS, ECDSA, EdDSA) - и некоторые реализации не доверяют сертификатам, использующим их когда-либо после 'разбитых' и теперь 'рухнувших' (подробности смотрите в Google, или посмотрите crypto.SX и security.SX).

...