Назад | Перейти на главную страницу

Заставить файл OpenSSL ca.config работать с PHP?

Я долго искал, но не нашел ответа. Я публикую это здесь, потому что это больше похоже на проблему OpenSSL, чем на PHP, хотя я могу использовать эту конфигурацию CA для создания сертификатов из командной строки, поэтому есть что-то, что PHP не нравится в этом.

При звонке openssl_pkey_new() в PHP я получаю сообщение об ошибке:

Error loading request_extensions_section section v3_req of /path/to/ca.config.

Я передаю путь к файлу ca.config в openssl_pkey_new() через массив config, и PHP открывает файл.

Файл ca.config выглядит так:

[ ca ]
default_ca = MyClientCA

[ crl_ext ]
issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always

[ MyClientCA ]
dir = /site/path/ssl/ca
new_certs_dir = $dir
unique_subject = no
certificate = $dir/MyClientCA.public
database = $dir/certindex
private_key = $dir/MyClientCA.key
serial = $dir/MyClientCA.srl
default_days = 3650
default_md = sha1
policy = myca_policy
x509_extensions = myca_extensions
crlnumber = $dir/crlnumber
default_crl_days = 730

[ myca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = optional
emailAddress = optional
organizationName = supplied
organizationalUnitName = optional

[ myca_extensions ]
basicConstraints = critical,CA:TRUE
keyUsage = critical,any
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
keyUsage = digitalSignature,keyEncipherment,cRLSign,keyCertSign
extendedKeyUsage = serverAuth
crlDistributionPoints = @crl_section
subjectAltName  = @alt_names
authorityInfoAccess = @ocsp_section

[ v3_ca ]
basicConstraints = critical,CA:TRUE,pathlen:0
keyUsage = critical,any
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
keyUsage = digitalSignature,keyEncipherment,cRLSign,keyCertSign
extendedKeyUsage = serverAuth
crlDistributionPoints = @crl_section
subjectAltName  = @alt_names
authorityInfoAccess = @ocsp_section

[alt_names]
DNS.0 = Sparkling Intermidiate CA 1
DNS.1 = Sparkling CA Intermidiate 1

[crl_section]
URI.0 = http://pki.sparklingca.com/SparklingRoot.crl
URI.1 = http://pki.backup.com/SparklingRoot.crl

[ocsp_section]
caIssuers;URI.0 = http://pki.sparklingca.com/SparklingRoot.crt
caIssuers;URI.1 = http://pki.backup.com/SparklingRoot.crt
OCSP;URI.0 = http://pki.sparklingca.com/ocsp/
OCSP;URI.1 = http://pki.backup.com/ocsp/

К сожалению, ошибка error loading request_extensions_section section v3_req не очень полезно.

У меня нет request_extensions раздел в файле. Есть x509_extensions директива, указывающая на myca_extensions но, похоже, в этом нет ничего плохого.

Нет v3_req раздел тоже. Есть v3_ca раздел, но опять же, я не вижу в этом ничего плохого.

Как я могу получить более подробную информацию о том, что не так с файлом конфигурации?

Обновить

Я много чего перепробовал.

Я попытался скопировать файл из системного файла openssl.conf по умолчанию, но это просто изменило ошибку на:

error:0E06D06C:configuration file routines:NCONF_get_string:no value

В сети довольно много людей, которые спрашивают об этой ошибке, но ни у кого нет полезных ответов.

Перешел на базовый конфиг:

[ ca ]
default_ca = ClientCA

[ ClientCA ]
dir = /path/var/ssl
new_certs_dir = $dir/pk12
unique_subject = no
certificate = $dir/ca/ClientCA.public
database = $dir/ca/certindex
private_key = $dir/ca/ClientCA.key
serial = $dir/ca/ClientCA.srl
default_days = 3650
default_md = sha256
policy = myca_policy
x509_extensions = myca_extensions

[ myca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = optional
emailAddress = optional
organizationName = supplied
organizationalUnitName = optional

[ myca_extensions ]
basicConstraints = CA:FALSE
keyUsage = critical,any
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
keyUsage = digitalSignature,keyEncipherment,cRLSign,keyCertSign
extendedKeyUsage = serverAuth
crlDistributionPoints = @crl_section
subjectAltName  = @alt_names
authorityInfoAccess = @ocsp_section

Но такая же ошибка:

error:0E06D06C:configuration file routines:NCONF_get_string:no value

Конфигурация отлично работает, создавая сертификаты из командной строки.