создайте csr с ключом кривой secp384r1elliptic и хэш-сигнатурой sha384
Я использую команды openssl для создания CSR с эллиптической кривой secp384r1 и хэшем, подписанным алгоритмом sha384:
openssl ecparam-out ec_client_key.pem-name secp384r1-genkey
openssl req-новый ключ ec_client_key.pem-out ec_clientReq.Пем!--3-->
затем я показываю CSR в удобочитаемом формате с помощью этой команды:
openssl req-в ec_clientReq.pem-noout-text
в подпись часть КСО, я получаю это:
Signature Algorithm: ecdsa-with-SHA1 30:64:02:30:06:a1:f2:5e:1b:34:18:b9:f3:7c:e9:52:c8:78: 99:90:63:d2:1e:d2:f5:7a:25:f3:d6:4d:6d:90:d0:bf:25:45: 15:ad:aa:17:34:ad:1a:b9:1e:67:2b:cf:d7:a6:9b:e5:02:30: 31:fe:76:37:4b:11:3a:e7:2d:63:52:bb:18:2f:8e:43:a7:bb: 65:74:38:a4:92:38:9d:eb:ec:22:8f:77:f3:e4:5f:47:2d:f8: 2a:9b:e1:2c:ba:a7:b0:e6:c2:54:8d:0e
что мне делать, чтобы получить алгоритм подписи "ecdsa-with-SHA384" вместо "ecdsa-with-SHA1"? Я что-то упускаю в этом процессе? Я попытался использовать -sha384 во второй команде
openssl req-новый ключ ec_client_key.pem-out ec_clientReq.Пэм-значения sha384
но я получил тот же результат относительно подписи Алгоритм
Signature Algorithm: ecdsa-with-SHA1 30:65:02:30:4e:b4:b6:5f:3a:fc:b7:28:e5:4b:f0:3d:9a:ea: 4a:ba:ce:a4:f1:a6:e8:cd:15:19:23:a6:81:3f:24:01:d7:81: 3c:9d:9a:4c:cd:4b:4a:12:6d:69:48:ec:7e:73:7d:73:02:31: 00:d7:a5:63:9b:21:b2:95:ce:7f:13:3f:c5:1a:ac:99:01:ff: ba:9c:59:93:d5:ee:97:03:b5:9e:c1:7d:03:f8:72:90:65:b5: 08:7c:79:ae:ea:4f:6e:b0:2b:55:1a:11:a5
другой вопрос касается формата подписи. В приведенных выше примерах длина одного составляет 102 байта, а второго-103 байта. Кажется, что первые байты являются заголовком, включая тип, длину и могут быть некоторые другие вещи, такие как заполнение. Но я не могу найти точного определения. Может кто-нибудь пролить свет на это? Спасибо
3 ответов
Я попробовал снова с последней версией openssl 1.0.1 e на этот раз (вместо 0.9.8 n).
openssl ecparam-out ec_client_key.pem-name secp384r1-gen
openssl req-config openssl.cnf-new-ключ ec_client_key.pem-out ec_clientReq.Пэм-значения sha384
openssl req-в ec_clientReq.pem-noout-text
теперь я получаю ожидаемый результат:
Подпись : ecdsa-with-SHA384
похоже, что версия 0.9.8 n не поддерживает sha384.
эта выдержка из файла изменений, похоже, подтверждает это:
изменения между 1.0.0 h и 1.0.1 [14 Mar 2012] : ... * ) Добавить HMAC ECC шифровальных наборов от RFC5289. Включают в себя значения sha384 поддержка ПРФ. Как требуется RFC5289, эти шифры нельзя использовать, если для версии TLS ранее 1.2. [Стив Хенсон]
спасибо gtrig за вашу помощь.
когда я использую ту же команду, что и вы с опцией-SHA384, я получаю это в результирующем CSR: "алгоритм подписи: ecdsa-with-SHA384".
введите эту команду, чтобы просмотреть список поддерживаемых дайджестов:
openssl list-message-digest-algorithms
надеюсь, вы увидите SHA384 в этом списке.
о вашем 2-м вопросе, формат ASN.1. "30" означает, что следует последовательность (в данном случае это последовательность из 2 целых чисел). "65" - это число октетов в последовательности. "02" представляет целое число, а 30-это количество октетов в это число. Если вы пропустите вперед 0x30 (48 в десятичном) октетах, вы придете ко 2-му целому числу, которое помечено "02" и "31". Таким образом, длина первого целого числа равна 30, а второго-31. Добавьте 2 октета для каждого целого числа, и вы получите 65, что является длиной последовательности. Это страница может рассказать вам больше о ASN.1.
поскольку это значение является последовательностью из 2 целых чисел, это имеет смысл. На уровнем подпись состоит из 2 чисел. См.RFC6605 раздел 4 для получения дополнительной информации. Существует также страница wiki это объясняет, как вычислить 2 целых числа.
чтобы сделать ответ более полным, можно упомянуть генерацию несамозаверяющих сертификатов с подписью ecdsa-sha384, потому что это немного отличается. Хитрость заключается в использовании параметра "-md sha384" с командой "openssl ca".
пример, включая сертификат клиента
создать ключ для центра сертификации:
openssl ecparam -out ca.key -name secp384r1 -genkey
создать самозаверяющий сертификат для ca:
openssl req -x509 -new -key ca.key -out ca-ca.pem -outform pem -sha384
создать ключ для a клиент:
openssl ecparam -out host1.key -name secp384r1 -genkey
создать запрос сертификата для ключа клиента:
openssl req -new -nodes -key host1.key -outform pem -out host1.req -sha384
создать сертификат для клиента в ответ на запрос:
openssl ca -keyfile ca.key -cert ca-ca.pem -in host1.req
-out ca-host1-cert.pem -md sha384 -outdir .