Я не мог заставить все работать, но эта часть работала, и это было неочевидно, поэтому я документирую это здесь на случай, если это поможет кому-то в будущем:
Сначала создайте ключ. Не сертификат, а ключ:
openssl ecparam -name prime256v1 -genkey -param_enc named_curve -out private-key.pem
Кривые elipti c типа prime
, похоже, работают, и важно, чтобы они были named_cure
типами. Вы можете изменить размер. Эта часть находится в документации.
Затем создайте сертификат:
openssl req -new -x509 -key private-key.pem -out tls-cert.pem -subj '/CN=Same name as original' -days 10000 -addext "subjectAltName = DNS:localhost"
Теперь, когда я запустил ЦС, он не работал. Хотел закрытый ключ. Это дало длинный шестнадцатеричный номер для закрытого ключа. Я скопировал закрытый ключ в хранилище ключей как файл с именем <long_number>_sk
, но этого было недостаточно. Этот файл содержит два раздела, и первый должен быть удален. Поэтому мне пришлось go и удалить первые три строки.
Это сработало. После этого у меня был сертификат CA, который также работал как сертификат TLS. Но теперь я должен воссоздать всех своих пользователей.
Я попытался добавить файл конфигурации с опцией -config
, но это удалило необходимый атрибут CA:TRUE
.
[EDIT]
Мне также удалось создать файл конфигурации, который работает и делает то же самое с помощью более короткой команды:
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_intermediate_ca
[ v3_intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
subjectAltName = @alt_names
[ req_distinguished_name ]
C = US
ST = CA
L = City
O = Institution
OU = Department
CN = main-ca
[ alt_names ]
DNS.0 = CN localhost
А затем:
openssl req -new -x509 -key private-key.pem -out tls-cert.pem -subj '/CN=The Subject' -days 10000 -config openssl.cnf