У меня есть интранет-сервер, на котором мне нужно установить SSL.
Этоopenssl.cnf
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
attributes = req_attributes
req_extensions = req_ext
#prompt = no
[ req_distinguished_name ]
countryName = US
countryName_min = 2
countryName_max = 2
stateOrProvinceName = CHICAGO
localityName = CHICAGO
0.organizationName = MY COMPANY
organizationalUnitName = IOS DEVELOPMENT
commonName = server2.myserver.local
commonName_max = 64
emailAddress = [email protected]
emailAddress_max = 64
[ req_attributes ]
challengePassword = password
challengePassword_min = 4
challengePassword_max = 20
[ req_ext ]
subjectAltName = @alt_names
extendedKeyUsage = serverAuth
[alt_names]
DNS.1 = server2.myserver.local
DNS.2 = myserver.local
Вот команды, которые я использую для его создания.
генерация корневого ключа CA
openssl genrsa -des3 -out rootCA.key 4096
2. это генерация корневого сертификата CA
openssl req \
-x509 -new -nodes \
-key rootCA.key -sha256 \
-days 825 \
-out rootCA.crt \
-subj /CN=server2.myserver.local \
-reqexts SAN \
-extensions SAN \
-config <(cat ./openssl.cnf \
<(printf '[SAN]\nsubjectAltName=DNS:server2.myserver.local')) \
-extensions 'req_ext'
генерация ключа сертификата
openssl genrsa -out mydomain.com.key 4096
генерация сертификата
openssl req -new -sha256 -key mydomain.com.key \ -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=server2.myserver.local" \ -reqexts SAN \ -config <(cat ./openssl.cnf \ <(printf "\n[SAN]\nsubjectAltName=DNS:server2.myserver.local,DNS:myserver.local")) \ -out mydomain.com.csr
преобразование сертификата CA в p12
openssl pkcs12 -export -out ca.p12 -inkey rootCA.key -in rootCA.crt
конвертация сертификата в p12
openssl pkcs12 -export -out certificate.p12 -inkey mydomain.com.key -in mydomain.com.crt
Затем я устанавливаю ca.p12
его certificate.p12
на свой сервер IIS и на свои устройства.
Когда я пытаюсь посетитьserver2.myserver.local
я получил
Как, во имя Святого Сертификата, мне это сделать?
решение1
Я бы сказал, что ваш корневой сертификат CA совершенно неверный. Сертификаты CA сильно отличаются от сертификатов TLS конечного хоста — вы не можете использовать одну и ту же конфигурацию для обоих.
Не указывайте домен сервера в теме — это бесполезно. Если это CA, то должно быть просто
CN=My internal CA
или что-то в этом роде.Добавьте
basicConstraints
расширение. Оно должно указывать, что сертификат — это CA.Добавьте правильный
keyUsage
. Вам нужно иметь 'keyCertSign' и (просто для полноты) 'cRLSign'.Не добавляйте
subjectAltName
. Сертификат предназначен для органа/эмитента, а не для сервера!Не добавляйте
extendedKeyUsage
. Иногда это используется для ограничения того, какие сертификаты может выдавать ЦС, но лучше начать без этой сложности.Хорошая идея добавить
subjectKeyIdentifier
, на случай, если позже у вас окажется несколько внутренних CA с идентичными DN субъекта. (Обычно DN CA должны быть уникальными, но наличие SKI/AKI немного смягчает это.)
Итак, у вас должен быть файл конфигурации «CA», который выглядит примерно так (и прекратите добавлять SAN и прочее через командную строку — для этого и нужен этот файл конфигурации):
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_dn ]
countryName = US
stateOrProvinceName = Chicago
organizationName = Company Name
organizationalUnitName = iOS development
commonName = Internal development CA
[ req_ext ]
basicConstraints = critical, CA:TRUE
keyUsage = keyCertSign, cRLSign
subjectKeyIdentifier = hash
В то время как сертификат конечного объекта (TLS-сервера) должен иметь следующие расширения:
...
[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer
subjectAltName = DNS:server2.myserver.local
Затем я устанавливаю ca.p12 и certificate.p12 на свой сервер IIS и на свои устройства.
Не устанавливайте закрытый ключ центра сертификации на свои устройства!Не устанавливайте его на сервер, также. Вы должны установитьтолькосертификат CA rootCA.crt
(публичная часть) и ничего больше.
Моя последняя рекомендация: не тратьте время на попытки сделать CA с помощью raw openssl
. Вместо этого используйтеEasy-RSA(тот, который идет с OpenVPN), или используйтеXCA(графическое приложение Linux) или используйте один извозможно, десяткиуже написанных и протестированных программ.