Как подписать CSR клиента с помощью openssl?

Мне не хватает чего-то простого и очевидного о подписании клиентского CSR с помощью команды openssl.

Я (смоделировал) две организации, одна из которых является организацией центра сертификации (существует в Калифорнии), а другая - организацией-клиентом, находящейся в штате Вашингтон.

Я создал центр сертификации в системе Linux с помощью команды openssl, выполнив следующие действия. http://www.freebsdmadeeasy.com/tutorials/freebsd/create-a-ca-with-openssl.php

У меня сейчас два файла: 1. cakey.pem, содержащий закрытый ключ CA. Это личное также связано с парольной фразой. 2. cacert.pem, содержащий самоподписанный сертификат CA

Затем я хочу подписать все CSR от клиентов. Клиент из штата Вашингтон отправляет мне файл client-csr.pem. Я читаю эту справочную страницу о подписании CSR и примеры в конце. http://www.openssl.org/docs/apps/ca.html

Команда, которую я пытаюсь, и сообщение об ошибке выглядят следующим образом: Я запускаю эти команды в системе CA, той же системе, где я создал cakey.pem (закрытый ключ CA) и cacert.pem (самозаверяющий сертификат CA)

$ openssl ca -in demoCA/csrs/client-csr.pem -out client-cert.pem
Using configuration from /usr/lib/ssl/openssl.cnf 
Enter pass phrase for ./demoCA/private/cakey.pem: 
Check that the request matches the signature 
Signature ok 
The stateOrProvinceName field needed to be the same in the 
CA certificate (California) and the request (WA)

Вопрос в том, почему имя состояния должно быть одинаковым как для CA-сертификата, так и для клиента-CSR.

Клиент НЕ находится в «Калифорнии», поэтому, когда они создают CSR, они указывают собственное название штата (WA). Как центр сертификации, я убедился, что клиент действительно находится в WA и что файл CSR действительно получен от них. Я хочу подписать этот CSR и вернуть сертификат клиенту.


person rpkrpk    schedule 20.05.2013    source источник
comment
Пожалуйста, проверьте свой файл конфигурации. Это должно выполняться конфигурацией, а не OpenSSL и X.509.   -  person doptimusprime    schedule 21.05.2013


Ответы (1)


Решено. Спасибо, dbasic.

В системе CA, в которой происходит подписывание, сделайте копию /etc/ssl/openssl.conf, измените ее и создайте новый файл конфигурации. Используйте эту измененную копию при подписании.

cp /etc/ssl/openssl.cnf  ./openssl-for-signing-csrs.cnf

И измените 'countryName', stateOrProvinceName или 'organizationName' на 'provided'. Это указывает на то, что сертификат должен использовать значения из CSR и не пытаться сопоставить с сертификатом (можно было бы попытаться «сопоставить» только для самоподписывания, openssl.cnf по умолчанию, похоже, был создан для самоподписи и не для ЦС)

80,82c80,82
< countryName           = match
< stateOrProvinceName   = match
< organizationName      = match
---
> countryName           = supplied
> stateOrProvinceName   = supplied
> organizationName      = supplied
person rpkrpk    schedule 21.05.2013