Aутентификация пользователя через сертификаты
Feb 072016#!/bin/bash
CONFIG="ca.config"
CRT="ca.crt"
function cert {
openssl req -new -newkey rsa:1024 -nodes -keyout $NAME.key -subj /C=RU/ST=Msk/L=Msk/O=Inc/OU=XXX/CN=YYY/emailAddress=$EMAIL -out $NAME.csr
openssl ca -config $CONFIG -in $NAME.csr -out $NAME.crt -batch
openssl x509 -noout -text -in $NAME.crt
openssl pkcs12 -export -in $NAME.crt -inkey $NAME.key -certfile $CRT -out $NAME.p12 -passout pass:"$NAME"
}
function em {
echo pass: "$NAME"
echo pass: "$NAME" > emailtext
mutt $EMAIL -c admin@email -a $NAME.p12 -s "New Certificate" -x < emailtext
}
NAME="USERNAME"
EMAIL="mail@to.user"
cert
em
sleep 1
Соответственно как можно видеть у меня в скрипте в качестве пароля к сертификату использовалось имя пользователя, можно заменить на вводимый пароль. Плюс у меня в строке с отсылкой сертификата есть -c для отсылки его еще админу, он еще дублем шел ко мне, что бы если что было удобно его юзеру еще разок выслать.
cat ca.config
[ ca ]
default_ca = CA_CLIENT # При подписи сертификатов
# использовать секцию CA_CLIENT
[ CA_CLIENT ]
dir = ./db # Каталог для служебных файлов
certs = $dir/certs # Каталог для сертификатов
new_certs_dir = $dir/newcerts # Каталог для новых сертификатов
database = $dir/index.txt # Файл с базой данных
# подписанных сертификатов
serial = $dir/serial # Файл содержащий серийный номер
# сертификата
# (в шестнадцатиричном формате)
certificate = ./ca.crt # Файл сертификата CA
private_key = ./ca.key # Файл закрытого ключа CA
default_days = 365 # Срок действия подписываемого
# сертификата
default_crl_days = 7 # Срок действия CRL (см. $4)
default_md = md5 # Алгоритм подписи
policy = policy_anything # Название секции с описанием
# политики в отношении данных
# сертификата
[ policy_anything ]
countryName = optional # Код страны - не обязателен
stateOrProvinceName = optional # ......
localityName = optional # ......
organizationName = optional # ......
organizationalUnitName = optional # ......
commonName = supplied # ...... - обязателен
emailAddress = optional # ......