Всем Хай,есть 3 команды:
1.openssl req -new -newkey rsa:1024 -nodes -keyout client01.key \
-subj /C=RU/ST=Msk/L=Msk/O=Inc/OU=Web/CN=usr/emailAddress=usr@dm.ru \
-out client01.csr
2.openssl ca -config ca.config -in client01.csr -out client01.crt -batch
3.openssl pkcs12 -export -in client01.crt -inkey client01.key \
-certfile ca.crt -out client01.p12 -passout pass:q1w2e3
нужен скрипт,что бы запрашивал при запуске:clien name,email,passwd,после генерил и переносил файл с расширением p12 в нужную диру.скрипт пойдет,на питоне баше пыхе перл.сам нашел тока на перле,но чет в нем ваще не але,сам
1.openssl req -new -newkey rsa:1024 -nodes -keyout client01.key \
-subj /C=RU/ST=Msk/L=Msk/O=Inc/OU=Web/CN=usr/emailAddress=usr@dm.ru \
-out client01.csr
2.openssl ca -config ca.config -in client01.csr -out client01.crt -batch
3.openssl pkcs12 -export -in client01.crt -inkey client01.key \
-certfile ca.crt -out client01.p12 -passout pass:q1w2e3
нужен скрипт,что бы запрашивал при запуске:clien name,email,passwd,после генерил и переносил файл с расширением p12 в нужную диру.скрипт пойдет,на питоне баше пыхе перл.сам нашел тока на перле,но чет в нем ваще не але,сам
Perl:
#!/usr/bin/perl -w
($#ARGV > -1) || die
"Usage:\n
--rs <DOMAIN> Request and sign domain.crt using rootCA.crt created with --ca option or other way.\n
--ca Request and sign rootCA.crt - root certificate for signing other.\n
--prepare Create neccessary folders.\n
--usage Display text about how to use this scripit.\n
";
# Подпись сертификата
if ($ARGV[0] =~ /--rs/)
{
($#ARGV > 0) || die "Provide Domain Name"; # Завершить работу, если не был передн домен на подпись
$domain_name = $ARGV[1]; # Используем второй параметр, как имя домена. Здесь нет проверок и защиты от дурака, только кавычки в вызове функции
$request_config = "./config.ini"; # Путь к конфигурационному файлу с настройками
$ENV{'KEY_COMMON'} = $domain_name; # Передача параметра домена в конфигурационный файл через переменные среды ( Посмотрите конф. файл )
# Команда запроса сертификата на подпись
$request = "openssl req -new -nodes -out \"$domain_name.csr\" -keyout \"$domain_name.key\" -config $request_config";
system($request) && die ("\nCertificate $domain_name request failed"); # Попытка выполнить команду
# Команад подписи запроса с помощью коренвого сертификата
$sign = "openssl ca -batch -out \"$domain_name.crt\" -config $request_config -infiles \"$domain_name.csr\" ";
# Попытка подписать запрос
system($sign) && die ("\nCertificate $domain_name sign failed");
# В случае успеха перемещаем результаты по папкам
system("mv $domain_name.crt certs/"); # Сам сертификат, публичная информация, можно передавать другим лицам
system("mv $domain_name.csr csr/"); # Файл запроса сертификата. Нужен, когда время действия сертификата или корневого сертификата истечет,
# и надо будет снова подписать запрос.
system("mv $domain_name.key keys/"); # Ключ сертификата. Приватная информация, в отличие от самого файла сертификата
exit(0);
}
# Генерация корневого сертификата
if ($ARGV[0] =~ /--ca/)
{
$ca_config = "./config.ini"; # Конфигурационный файл
$days = "3650"; # Создаем сертификат на 3650 дней
$ENV{'KEY_COMMON'} = 'poligon.scaytrase.ru'; # Общее имя для сертификата. Я указал тут имя своего главного домена. Можно указать название организации. Это имя будет отображаться в программах, как организация, подписавшая сертификат.
# Команда генерации корневого сертификата
$ca = "openssl req -new -x509 -extensions v3_ca -keyout ca/rootCA.key -out ca/rootCA.crt -days $days -config $ca_config";
system($ca) && die ("CA request failed"); # Попытка выполнить команду
exit(0);
}
# Создание необходимых файлов и директорий
if ($ARGV[0] =~ /--prepare/)
{
system ("mkdir ./ca"); # Директория корневого сертификата
system ("mkdir ./certs"); # Директория готовых сертификатов
system ("mkdir ./pemcerts"); # Директория для сертификатов в формате pem
system ("mkdir ./keys"); # Директория для ключей сертификатов
system ("mkdir ./csr"); # Директория для файлов запроса
system ("touch index.db"); # Индексный файл. Своеобразная база данных.
system ("touch serial.db"); # Файл с последним номером
system ("echo \"01\" > serial.db"); # Первый сертификат будет иметь номер 01
exit(0);
}
# Переподписывание сертификатов
#if ($ARGV[0] =~ /--resign/)
#{
# ($#ARGV > 0) || die "Provide Domain Name"; # Завершить работу, если не был передн домен на подпись
# $domain_name = $ARGV[1]; # Используем второй параметр, как имя домена. Здесь нет проверок и защиты от дурака, только кавычки в вызове функции
# $request_config = "./config.ini"; # Путь к конфигурационному файлу с настройками
# $ENV{'KEY_COMMON'} = $domain_name; # Передача параметра домена в конфигурационный файл через переменные среды ( Посмотрите конф. файл )
# $sign = "openssl ca -batch -out \"$domain_name.crt\" -config ./$request_config -infiles \"csr/$domain_name.csr\" ";
# Попытка подписать запрос
# system($sign) && die ("\nCertificate $domain_name sign failed");
# В случае успеха перемещаем результаты по папкам
# system("mv $domain_name.crt certs/"); # Сам сертификат, публичная информация, можно передавать другим лицам
# system("mv $domain_name.csr csr/"); # Файл запроса сертификата. Нужен, когда время действия сертификата или корневого сертификата истечет,
# и надо будет снова подписать запрос.
# system("mv $domain_name.key keys/"); # Ключ сертификата. Приватная информация, в отличие от самого файла сертификата
# exit(0);
#}
# Хелп по вызову
if ($ARGV[0] =~ /--usage/)
{
print STDOUT "\nЭтот скрипт автоматизирует процесс запроса, генерации и подписи сертификатов на основе самоподписанного корневого сертификата, который можно сгенерировать им же. Используйте вызов --prepare для того чтобы подготовить нужные файлы и папки для генерации, затем --ca для создания главного коренвого сертификата. После этого вы можете создать сертификат для каждого уникального домена (CommonName) с помощью опции --rs <domainname>";
print STDOUT "\n";
exit(0);
}
die
"Usage:\n
--rs <DOMAIN> Request and sign domain.crt using rootCA.crt created with --ca option or other way.\n
--ca Request and sign rootCA.crt - root certificate for signing other.\n
--prepare Create neccessary folders.\n
--usage Display text about how to use this scripit.\n
";