Как создать собственную цепочку сертификатов?

Я хотел бы настроить свой собственный ответчик OCSP для целей тестирования, и для этого мне необходимо иметь корневой сертификат с несколькими сертификатами, сгенерированными на его основе.

Мне удалось создать самозаверяющий сертификат с помощью openssl, и я хочу использовать его в качестве корневого сертификата. Следующим шагом будет создание производных сертификатов, однако я, похоже, не могу найти документацию о том, как это сделать. Кто-нибудь знает, где я могу это найти информация?

  • Редактировать:
    Оглядываясь назад, я понимаю, что на мой вопрос еще нет полного ответа, и чтобы прояснить проблему, я представлю свою цепочку сертификатов следующим образом: Root > A > B> C > ...

В настоящее время я могу создать корневой сертификат и сертификат A с помощью приведенного ниже, но я не нашел, как создать более длинную цепочку:

# Root certificate is created like this:
  openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
  openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem

# Certificate A is created like this:
  openssl genrsa -out client.key 1024
  openssl req -new -key client.key -out client.csr
  openssl ca -in client.csr -out client.cer
  • Эта команда неявно зависит от корневого сертификата, для которого она находит требуемый информация в файле конфигурации OpenSSL, однако сертификат B должен полагаться только на A, который не зарегистрирован в файле конфигурации, поэтому предыдущая команда здесь работать не будет.

Какую команду я должен использовать для создания сертификатов B и выше?

  • Редактировать:
    Я нашел ответ в этой статье: Сертификат B (цепочка A ->B) может быть создан с помощью этих двух команд, и этот подход, похоже, работает хорошо.:

    # Create a certificate request
    openssl req -new -keyout B.key -out B.request -days 365
    
    # Create and sign the certificate
    openssl ca -policy policy_anything -keyfile A.key -cert A.pem -out B.pem -infiles B.request
    

    Я также изменен файл openssl.cnf:

    [ usr_cert ]
    basicConstraints=CA:TRUE # prev value was FALSE