Вот сценарий оболочки, который я использую для генерации сертификатов с использованием openssl.
Это всего лишь тестовый сценарий, который я написал, так что вы можете установить дополнительную безопасность. Наличие паролей, написанных где-то, не очень хорошая идея. Возможно, вы захотите запустить его полностью в своей тестовой среде или настроить по своему усмотрению.
Вот что требуется:
- Надлежащий сертификат CA, собственный закрытый ключ и т. Д., Я полагаю, он у вас уже есть.
(Я сгенерировал самоподписанный файл, и он будет у меня в папке demoCA. Или вы можете сгенерировать с помощью /usr/share/ssl/misc/CA.sh -newca)
- Openssl
- Текстовый файл (cert.input) с необходимыми данными {Страна, штат, город, компания, организация, общее имя и т. Д. Все в новой строке}
- Текстовый файл (caconfirm.input) для ввода подтверждения (для ответа «да»)
- Текстовый файл для паролей. (pass.input) Я буду использовать MyPassword для всех моих паролей, связанных с сертификатом.
Существует только 1 требование, файл закрытого ключа ca не должен быть защищен паролем. Если это так, вы можете запустить:
openssl rsa -in demoCA / private / cakey.pem -out
demoCA / частный / cakey_nopass.pem
Допустим, я сохранил имя файла в CERT_FILE_NAME.
В конце вы получите папку с указанным вами именем (имя файла), содержащую:
сертификат в формате pem (filename.pem), сертификат в формате crt (filename.crt), сертификат в der (двоичный формат, (filename.der)), сертификат в защищенном паролем формате .p12 (filename.p12), закрытый ключ сертификата защищенный паролем (filename_Password.key) и сертифицированный закрытый ключ, не защищенный паролем. (Filename_NoPassword.key)
#!/bin/sh
CERT_FILE_NAME=$1
#Lets generate a typical private key
openssl genrsa -passout pass:MyPassword -des3 -out ${CERT_FILE_NAME}_Password.key 1024
#Now, generate a cert signing request, and recieve the data from cert.input
openssl req -passin pass:MyPassword -new -key ${CERT_FILE_NAME}_Password.key -out ${CERT_FILE_NAME}.csr < cert.input
#Sign the csr with the private key of our CA, and recieve the confirmation from caconfirm.input
openssl ca -in ${CERT_FILE_NAME}.csr -cert demoCA/cacert.pem -keyfile demoCA/private/cakey_nopass.pem -out ${CERT_FILE_NAME}.crt -days 3825 < caconfirm.input
#Export my new cert to a password protected p12 file
openssl pkcs12 -passin pass:MyPassword -passout pass:MyPassword -export -in ${CERT_FILE_NAME}.crt -inkey ${CERT_FILE_NAME}_Password.key -out ${CERT_FILE_NAME}.p12
#(Optional) Export my private key to a plain text private key
openssl rsa -passin file:pass.input -in ${CERT_FILE_NAME}_Password.key -out ${CERT_FILE_NAME}_NOPassword.key
# Output the crt into strict pem format having BEGIN/END lines
grep -A 1000 BEGIN ${CERT_FILE_NAME}.crt > ${CERT_FILE_NAME}.pem
# Convert the pem into der (binary) format
openssl x509 -outform der -in ${CERT_FILE_NAME}.pem -out ${CERT_FILE_NAME}.der
# Create a directory
mkdir ${CERT_FILE_NAME}
# Move all my cert files in the folder
mv ${CERT_FILE_NAME}*.* ${CERT_FILE_NAME}
Теперь содержимое текстовых файлов, которые мы использовали (каждый элемент в новой строке):
cert.input:
Country
State
CityName
CompanyName
OrgName
CommonName
pass.input:
MyPassword
caconfirm.input:
y
y