Не могу сгенерировать клиентский сертификат после того, как стал собственным центром сертификации

Не могу сгенерировать клиентский сертификат после того, как стал собственным центром сертификации

ястал моим собственным центром сертификациипосле прохождения руководства по адресу:https://jamielinux.com/docs/openssl-certificate-authority/

Я создал корневую пару, создал промежуточную пару и подписал сертификат сервера, который установил на Squid следующим образом:

http_port 3129 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/certs/gatesentry.csr.cert.pem key=/etc/squid3/key/gatesentry.key.pem

вsquid3.conf

Squid запускается просто отлично с этим. Все еще не уверен, работает ли он на самом деле или нет.

Когда я пытаюсь сгенерировать клиентский сертификат для установки в браузере, который будет выходить в Интернет через прокси-сервер, я получаю ошибку:

Я создаю его на основеРаздел «Подписание сертификатов сервера и клиента», в котором говорится «Создание сертификата»

Там говорится, что если я собираюсь создать клиентский сертификат для аутентификации, мне нужно будет использовать расширение «usr_crt», поэтому я запускаю:

cd /root/ca
openssl ca -config intermediate/openssl.conf \
      -extensions usr_cert -days 375 -notext -md sha256 \
      -in intermediate/csr/gatesentry.csr.pem \
      -out intermediate/certs/client.cert.pem
Using configuration from intermediate/openssl.conf
Enter pass phrase for /root/ca/intermediate/private/intermediate.key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4097 (0x1001)
        Validity
            Not Before: Jun 22 10:36:44 2016 GMT
            Not After : Jul  2 10:36:44 2017 GMT
        Subject:
            countryName               = US
            stateOrProvinceName       = Pennsylvania
            localityName              = locality
            organizationName          = Parents
            organizationalUnitName    = Security
            commonName                = gatesentry.domain.lan
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Cert Type: 
                SSL Client, S/MIME
            Netscape Comment: 
                OpenSSL Generated Client Certificate
            X509v3 Subject Key Identifier: 
                XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
            X509v3 Authority Key Identifier: 
                keyid:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

            X509v3 Key Usage: critical
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication, E-mail Protection
Certificate is to be certified until Jul  2 10:36:44 2017 GMT (375 days)
Sign the certificate? [y/n]: y
failed to update database
TXT_DB error number 2

Я не понимаю, почему я получаю сообщение об ошибке TXT_DB номер 2, когда я запускаю команду как пользователь root (на другой машине, конечно).

Согласно руководству, я должен иметь возможность изменить общее имя в ходе этого процесса.

решение1

TXT_DB error number 2означает DB_ERROR_INDEX_CLASH.

Вы дважды попытались отправить сертификат в базу данных центра сертификации OpenSSL с одним и тем же индексом.

Причиной этого обычно является отправка сертификата в базу данных, которая содержит тот же серийный номер или то же общее имя. Для последнего проверьте опцию unique_subjectв intermediate/openssl.confфайле, о которой вы можете прочитать в man ca.

Общим именем клиентского сертификата может быть что угодно, например, ваше имя.

Common Name будет указано в intermediate/openssl.confфайле. Его можно настроить либо на запрос значений, либо на чтение значений из файла конфигурации. Это контролируется опцией prompt, о которой вы можете прочитать в man req.

решение2

Согласно руководству, я должен иметь возможность изменить общее имя во время этого процесса.

В этом руководстве говорится, что нужно сгенерировать новый ключ с помощью openssl genrsaИ новый CSR с помощью openssl req -newИ создать сертификат из CSR с помощью openssl ca. (Хотя, как и у многих людей, здесь ошибочно говорится, что сертификат создается путем «подписания CSR». CA не подписывает CSR. CA подписывает сертификат, который создаетчастично основано наКСО, но отличается от КСО. /Готовность)

Когда вы создаете новый CSRвы указываете имя субъекта, включая, помимо прочего, общее имя, которое, как указано, должно отличаться от сертификатов CA, указанных выше, идолженотличаться от других сертификатов EE во избежание путаницы.

openssl caна самом деле можно переопределить имя субъекта для выданного сертификата (полное имя, а не отдельное общее имя), но это приведет к сертификатам с разными именами для одного и того же ключа, что в лучшем случае излишне запутывает и, как правило, менее безопасно (хотя вас эта часть не волнует, а вот других волнует, так что это не упрощает задачу).

Ошибка загрузки расширения в разделе usr-crt
... нет значения ... name=email_in_dn
Возможно, это происходит из вышестоящего файла настроек по умолчанию ...

Не напрямую. openssl ca -config xxxиспользует xxx и только xxx в качестве своего файла конфигурации. Если ваш файл получен из upstream, имя раздела, которое вам нужно, такое, usr_certкак вы, по-видимому, обнаружили, но вам не нужно указывать usr_cert, потому что это значение по умолчанию. Сообщение об ошибке email_in_dn просто осталось в стеке ошибок, и единственной настоящей ошибкой было usr-crt; после исправления оно -noemailDNне понадобится, хотя оно вам все равно может понадобиться.

Связано ли это как-то с subjectNameAlt?

Если вы имеете в виду unique_subject, нет. subjectAltName(не subjectNameAlt) также известный как SAN — это распространенное расширение, которое указывает альтернативные имена для субъекта, но unique_subjectотносится только к основному Subjectполю, а не к любому SAN.

клиентский сертификат для установки в браузере, который будет выходить в интернет через прокси-сервер

Для ясности: такой клиентский сертификат полезен только для вашей аутентификации.к прокси. Вы не можете использовать сертификат в клиенте/браузере для аутентификации в чем-либо в Интернете через ЛЮБОЙ HTTPS MitM, и вы не можете использовать клиентский сертификат, который вы выдали сами, для аутентификации в чьей-либо другой системе(ах) в Интернете.

Связанный контент