Как я могу настроить «отличительное имя» с помощью переменных среды?

#openssl #libressl

Вопрос:

Я использую libressl на Alpine со следующими версиями:

 $ cat /etc/os-release  NAME="Alpine Linux" ID=alpine VERSION_ID=3.14.2 PRETTY_NAME="Alpine Linux v3.14" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/" $ libressl version -a LibreSSL 3.3.3 built on: date not available platform: information not available options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)  compiler: information not available OPENSSLDIR: "/etc/ssl"  

Я использую следующий openssl.cnf файл

 # default section for variable definitions  DN = ca_dn DISTINGUISHED_NAME = ${ENV::DN}  # certificate request configuration  [ req ] default_bits = 2048 default_md = sha256 encrypt_key = no prompt = no string_mask = utf8only distinguished_name = ${DISTINGUISHED_NAME}  [ ca_dn ] C = SE ST = Stockholm County L = Stockholm O = Organization OU = Unit CN = Name 1 emailAddress = user@domain.com  # certificate authority configuration  [ ca_ext ] authorityKeyIdentifier = keyid, issuer subjectKeyIdentifier = hash basicConstraints = critical, CA:TRUE, pathlen:1 keyUsage = critical, keyCertSign, cRLSign  # another distinguished name [ other_dn ] C = SE ST = Stockholm County L = Stockholm O = Organization OU = Unit CN = Name 2  

и я пытаюсь получить сертификаты, сгенерированные с разными отличительными именами, с помощью переменных среды. До сих пор мне не удавалось достичь того, чего я хочу:

 $ printenv DN $ libressl req -newkey rsa:4096 -x509 -days 3650   -keyout certs/ca.key -out certs/ca.crt   -config certs/openssl.cnf -extensions ca_ext $ libressl x509 -noout -subject -in certs/ca.crt  subject= /C=SE/ST=Stockholm County/L=Stockholm/O=Organization/OU=Unit/CN=Name 1/emailAddress=user@domain.com $ export DN=other_dn $ printenv DN other_dn $ libressl req -newkey rsa:4096 -x509 -days 3650   -keyout certs/ca.key -out certs/ca.crt   -config certs/openssl.cnf -extensions ca_ext $ libressl x509 -noout -subject -in certs/ca.crt  subject= /C=SE/ST=Stockholm County/L=Stockholm/O=Organization/OU=Unit/CN=Name 1/emailAddress=user@domain.com  

I think I have done my job to search the internet for similar problems, but I have not come up with the exact situation (and a solution) yet. There are examples that show how to benefit from environment variables when setting SANs, but I could not see a case where the user is willing to change DNs through environment variables.

I have the following questions:

  1. Is what I am trying to achieve (i.e., have different DNs inside a configuration file and select them properly via environment variables) not doable at all?
  2. If the answer to the previous question is «No; you can achieve it,» how can I use the environment variables?

Обратите внимание, что выше я привел только минимальный (не)рабочий пример. В реальном случае у меня есть более длинный файл конфигурации, который правильно кодирует запросы и параметры расширения x509 для разных серверов и клиентов в одном центре сертификации. Если вам понадобится полный файл конфигурации, пожалуйста, дайте мне знать, чтобы я мог удалить конфиденциальную информацию и вставить полный файл конфигурации, обновив свой вопрос.

Я заранее благодарю вас за ваше время и помощь, и я с нетерпением жду любых указаний и/или конструктивных отзывов, которые могли бы решить мою проблему.