SSL/TLS-сертификаты для лентяев

Если в двух словах, то SSL/TLS-сертификат (SSL: Secure Sockets Layer, TLS: Transport Layer Security) – это уникальная цифровая подпись, необходимая для организации защищенного соединения между клиентом и сервером.
 
Создание SSL-сертификата условно можно разделить на следующие шаги:

  • создание личного ключа (Private Key);
  • создание запроса для получения сертификата (Certificate Signing Request);
  • создание самоподписанного сертификата (Self-Signed Certificate).


Для создания сертификатов я написал небольшой скриптик:

#!/bin/sh
#--------------------------------------------------------------------------
# certroutine.sh: script for creating SSL Certificates
# $Revision: 1.00 (CentOS Edition by Wakko Warner) $
# $Comment: Any comments please send to wakko@acmelabs.spb.ru $
#--------------------------------------------------------------------------

#################
# User Settings #
#################
# Country Name (2 letter code)
  C_="RU"
# State or Province Name (full name)
  ST_="North-West"
# Locality Name (eg, city)
  L_="Saint-Petersburg"
# Organizational Name (eg, company)
  O_=""
# Organizational Unit Name (eg, section)
  OU_=""
# Common Name (eg, YOUR name, domain or host name, don't add *. for wildcards)
  CN_=""
# Email Address
  EM_=""
# Subject Alternative Names (enter * for wildcard certificate)
  SAN_=""

[ "$C" == "" ] && C="$C_"; [ "$ST" == "" ] && ST="$ST_"; [ "$L" == "" ] && L="$L_"
[ "$O" == "" ] && O="$O_"; [ "$OU" == "" ] && OU="$OU_"; [ "$CN" == "" ] && CN="$CN_"
[ "$EM" == "" ] && EM="$EM_"; [ "$SAN" == "" ] && SAN="$SAN_"
if [ "$CN" == "" ]; then
	echo "This script allows you to create:"
	echo "  o public/private key pairs"
	echo "  o SSL certificate signing requests (CSRs)"
	echo "  o self-signed SSL certificates"
	echo
	echo "Edit settings in the script before beginning!"
	exit 0
fi

OPENSSL=/usr/bin/openssl
UTF8=`locale -c LC_CTYPE -k | grep -q charmap.*UTF-8 && echo -utf8`
KEYLEN=2048
TYPE=rsa:${KEYLEN}
[ "$SERIAL" == "" ] && SERIAL=0
[ "$DAYS" == "" ] && DAYS=365

TLSROOT=/etc/pki/tls
KEY=${TLSROOT}/private/$CN.key
CSR=${TLSROOT}/certs/$CN.csr
CRT=${TLSROOT}/certs/$CN.crt
PEM=${TLSROOT}/certs/$CN.pem
if [ "$SAN" == "*" ]; then
	CN="*.$CN"
	SAN=""
fi

createconfig() {
	CNF=`/bin/mktemp /tmp/openssl.XXXXXX`
	CONFIG="-batch -config $CNF"
	cat <<EOF >$CNF
[req]
default_bits			= $KEYLEN
default_md			= sha256
distinguished_name		= req_distinguished_name
req_extensions			= v3_req

[req_distinguished_name]
countryName			= Country Name (2 letter code)
countryName_default		= $C
stateOrProvinceName		= State or Province Name (full name)
stateOrProvinceName_default	= $ST
localityName			= Locality Name (eg, city)
localityName_default		= $L
organizationName		= Organizational Name (eg, company)
organizationName_default	= $O
organizationalUnitName		= Organizational Unit Name (eg, section)
organizationalUnitName_default	= $OU
commonName			= Common Name (eg, YOUR name)
commonName_default		= $CN
commonName_max			= 64
emailAddress			= Email Address
emailAddress_default		= $EM

[v3_ca]
basicConstraints		= CA:TRUE
subjectKeyIdentifier		= hash
authorityKeyIdentifier		= keyid:always,issuer:always

[v3_req]
basicConstraints		= CA:FALSE
keyUsage			= nonRepudiation, digitalSignature, keyEncipherment
EOF
	if [ ! "$SAN" == "" ]; then
		echo "subjectAltName			= @alt_names" >>$CNF
		echo "" >>$CNF
		echo "[alt_names]" >>$CNF
		i=0
		for AN in $SAN
		do
			((i++))
			echo "DNS.$i				= $AN" >>$CNF
		done
	fi
}

usage() {
	echo "This script allows you to create:"
	echo "  o public/private key pairs"
	echo "  o SSL certificate signing requests (CSRs)"
	echo "  o self-signed SSL certificates"
	echo
	echo Usage:
	echo "  To create a KEY file, run \"$0 genkey\";"
	echo "  To create a CSR file, run \"$0 gencsr\";"
	echo "  To create a CRT file, run \"$0 gencrt\";"
	echo "  To create a PEM file, run \"$0 genpem\";"
	echo "  To verify a CSR file, run \"$0 verifycsr\";"
	echo "  To verify a CRT file, run \"$0 verifycrt\"."
	echo
	echo "${TLSROOT}/private/ is output directory for key files"
	echo "${TLSROOT}/certs/ is output directory for CSR, CRT and PEM files"
	echo
	echo "To create a test certificate with serial number other than zero, add SERIAL=num"
	echo "You can also specify key length with KEYLEN=n and expiration in days with DAYS=n"
	echo "Also you can specify C=, ST=, L=, O=, OU=, CN=, EM=, SAN=..."
	echo
	echo Examples:
	echo "  CN=www.example.com $0 genkey"
	echo "  CN=www.example.com SAN=\"mail.example.com blog.example.com\" $0 gencsr"
	echo "  CN=www.example.com SAN=\"mail.example.com blog.example.com\" $0 gencrt"
	return 0
}

genkey() {
	umask 77
	$OPENSSL genrsa $KEYLEN -sha256 -nodes >$KEY
	return 0
}

gencsr() {
	umask 77
	[ ! -f $KEY ] && genkey
	createconfig
	$OPENSSL req $UTF8 -new -key $KEY -out $CSR $CONFIG
	rm -f $CNF
	return 0
}

verifycsr() {
	$OPENSSL req -in $CSR -text -verify -noout
	return 0
}

gencrt() {
	umask 77
	[ ! -f $KEY ] && genkey
	createconfig
	$OPENSSL req $UTF8 -new -key $KEY -x509 -days $DAYS -out $CRT $CONFIG -set_serial $SERIAL
	rm -f $CNF
	CRTHASH=`openssl x509 -hash -noout -in $CRT`.0
	rm -f ${TLSROOT}/certs/$CRTHASH
	ln -s $CN.crt ${TLSROOT}/certs/$CRTHASH
	return 0
}

verifycrt() {
	$OPENSSL verify $CRT
	return 0
}

genpem() {
	umask 77
	PEM1=`/bin/mktemp /tmp/openssl.XXXXXX`
	PEM2=`/bin/mktemp /tmp/openssl.XXXXXX`
	createconfig
	$OPENSSL req $UTF8 -newkey $TYPE -keyout $PEM1 -nodes -x509 -days $DAYS -out $PEM2 \
		$CONFIG -set_serial $SERIAL
	rm -f $CNF
	cat $PEM1 >  $PEM
	echo ""   >> $PEM
	cat $PEM2 >> $PEM
	rm -f $PEM1 $PEM2
	return 0
}

case $1 in
	genkey | gencsr | gencrt | genpem | verifycsr | verifycrt)
		$1
		exit $?
	;;
	*)
		usage
		exit $?
	;;
esac

В верхней части скрипта можно заполнить дефолтные значения:

# Country Name (2 letter code)
  C_="RU"
# State or Province Name (full name)
  ST_="North-West"
# Locality Name (eg, city)
  L_="Saint-Petersburg"
# Organizational Name (eg, company)
  O_="Example Organization"
# Organizational Unit Name (eg, section)
  OU_=""
# Common Name (eg, YOUR name, domain or host name, don't add *. for wildcards)
  CN_="www.example.com"
# Email Address
  EM_="hostmaster@example.com"
# Subject Alternative Names (enter * for wildcard certificate)
  SAN_="mail.example.com"

Тогда для создания ключа и самоподписанного сертификата, нужно будет выполнить:

$ ./certroutine.sh genkey
Generating RSA private key, 2048 bit long modulus
............................................+++
.....................................+++
e is 65537 (0x10001)
$ ./certroutine.sh gencrt
$ ./certroutine.sh verifycrt
/etc/pki/tls/certs/www.example.com.crt: OK

Первая команда создаст приватный ключ /etc/pki/tls/private/www.example.com.key, вторая команда создаст самоподписанный сертификат /etc/pki/tls/certs/www.example.com.crt, а третья команда проверит валидность этого сертификата.
Note: Безотносительно скрипта, если при проверке любого сертификата пишется что-то типа:

/etc/pki/tls/certs/www.example.com.crt: C = RU, ST = North-West, L = Saint-Petersburg, O = ACME Networks, CN = www.example.com, emailAddress = admin@acmenet.ru
error 18 at 0 depth lookup:self signed certificate
OK

Это означает, что для этого сертификата, в папке /etc/pki/tls/certs отсутствует необходимая информация для проверки. Необходимо убедиться, что в этой папке присутствует проверяемый сертификат, а так же присутствуем симлинк с хэшем вместо имени, на проверяемый сертификат. Если симлинка нет – его необходимо создать:

$ cd /etc/pki/tls/certs
$ ln -s $CRT `openssl x509 -hash -noout -in $CRT`.0

Где вместо $CRT – имя файла нашего сертификата.
 
Если планируется подписывать сертификат по-взрослому, на стороне – необходимо создать личный ключ и запроса для получения сертификата:

$ ./certroutine.sh genkey
Generating RSA private key, 2048 bit long modulus
............................................+++
.....................................+++
e is 65537 (0x10001)
$ ./certroutine.sh gencsr
$ ./certroutine.sh verifycsr
verify OK
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=RU, ST=North-West, L=Saint-Petersburg, O=ACME Networks, CN=www.example.com/emailAddress=admin@acmenet.ru
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    [...]
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
    Signature Algorithm: sha256WithRSAEncryption
         [...]
$ cat /etc/pki/tls/certs/www.example.com.csr
-----BEGIN CERTIFICATE REQUEST-----
[...]
-----END CERTIFICATE REQUEST-----

Содержимое этого csr-файла необходимо будет отправлять в компанию, которая будет заверять ваш сертификат.
 
Так же, скриптом можно пользоваться вот таким образом:

$ CN="www.example.com" ./certroutine.sh genkey
$ C="RU" ST="North-West" L="Saint-Petersburg" O="Example Org" CN="www.example.com" \
	EM="hostmaster@example.com" SAN="mail.example.com" ./certroutine.sh gencsr
$ C="RU" ST="North-West" L="Saint-Petersburg" O="Example Org" CN="www.example.com" \
	EM="hostmaster@example.com" SAN="mail.example.com" ./certroutine.sh gencrt

 
Если будете использовать бесплатные сертификаты от StartSSL, не забудьте сделать следующее:

$ cd /etc/pki/tls/certs
$ wget https://www.startssl.com/certs/sub.class1.server.ca.pem
$ ln -s sub.class1.server.ca.pem `openssl x509 -hash -noout -in sub.class1.server.ca.pem`.0

Иначе при верификации сертификата будете получать ошибку:

$ openssl verify mail.example.com.crt 
mail.example.com.crt: C = RU, CN = mail.example.com, emailAddress = hostmaster@example.com
error 20 at 0 depth lookup:unable to get local issuer certificate

Comments

  1. При выполнении скрипта!
    /home/centos/Desktop/1.sh: line 1: $’3\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 2: $’4\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 3: $’5\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 4: $’6\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 5: $’7\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 6: $’8\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 7: $’9\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 8: $’10\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 9: $’11\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 10: $’12\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 11: $’13\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 12: $’14\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 13: $’15\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 14: $’16\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 15: $’17\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 16: $’18\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 17: $’19\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 18: $’20\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 19: $’21\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 20: $’22\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 21: $’23\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 22: $’24\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 23: $’25\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 24: $’26\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 25: $’27\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 26: $’28\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 27: $’29\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 28: $’30\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 29: $’31\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 30: $’32\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 31: $’33\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 32: $’34\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 33: $’35\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 34: $’36\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 35: $’37\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 36: $’38\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 37: $’39\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 38: $’40\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 39: $’41\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 40: $’42\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 41: $’43\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 42: $’44\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 43: $’45\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 44: $’46\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 45: $’47\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 46: $’48\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 47: $’49\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 48: $’50\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 49: $’51\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 50: $’52\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 51: $’53\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 52: $’54\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 53: $’55\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 54: $’56\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 55: $’57\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 56: $’58\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 57: $’59\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 58: $’60\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 59: $’61\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 60: $’62\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 61: $’63\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 62: $’64\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 63: $’65\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 64: $’66\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 65: $’67\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 66: $’68\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 67: $’69\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 68: $’70\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 69: $’71\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 70: $’72\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 71: $’73\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 72: $’74\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 73: $’75\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 74: $’76\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 75: $’77\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 76: $’78\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 77: $’79\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 78: $’80\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 79: $’81\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 80: $’82\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 81: $’83\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 82: $’84\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 83: $’85\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 84: $’86\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 85: $’87\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 86: $’88\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 87: $’89\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 88: $’90\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 89: $’91\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 90: $’92\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 91: $’93\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 92: $’94\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 93: $’95\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 94: $’96\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 95: $’97\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 96: $’98\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 97: $’99\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 98: $’100\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 99: $’101\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 100: $’102\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 101: $’103\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 102: $’104\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 103: $’105\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 104: $’106\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 105: $’107\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 106: $’108\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 107: $’109\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 108: $’110\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 109: $’111\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 110: $’112\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 111: $’113\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 112: $’114\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 113: $’115\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 114: $’116\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 115: $’117\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 116: $’118\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 117: $’119\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 118: $’120\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 119: $’121\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 120: $’122\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 121: $’123\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 122: $’124\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 123: $’125\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 124: $’126\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 125: $’127\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 126: $’128\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 127: $’129\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 128: $’130\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 129: $’131\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 130: $’132\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 131: $’133\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 132: $’134\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 133: $’135\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 134: $’136\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 135: $’137\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 136: $’138\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 137: $’139\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 138: $’140\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 139: $’141\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 140: $’142\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 141: $’143\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 142: $’144\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 143: $’145\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 144: $’146\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 145: $’147\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 146: $’148\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 147: $’149\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 148: $’150\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 149: $’151\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 150: $’152\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 151: $’153\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 152: $’154\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 153: $’155\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 154: $’156\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 155: $’157\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 156: $’158\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 157: $’159\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 158: $’160\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 159: $’161\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 160: $’162\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 161: $’163\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 162: $’164\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 163: $’165\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 164: $’166\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 165: $’167\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 166: $’168\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 167: $’169\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 168: $’170\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 169: $’171\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 170: $’172\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 171: $’173\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 172: $’174\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 173: $’175\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 174: $’176\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 175: $’177\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 176: $’178\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 177: $’179\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 178: $’180\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 179: $’181\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 180: $’182\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 181: $’183\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 182: $’184\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 183: $’185\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 184: $’186\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 185: $’187\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 186: $’188\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 187: $’189\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 188: $’190\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 189: $’191\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 190: $’192\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 191: $’193\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 192: $’194\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 193: $’195\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 194: $’196\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 195: $’\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 202: $’\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 222: $’\r’: команда не найдена
    /home/centos/Desktop/1.sh: line 253: syntax error near unexpected token `$'{\r»
    ‘home/centos/Desktop/1.sh: line 253: `createconfig() {

  2. Константин
    10.04.2015 - 15:36

    Спасибо! А как теперь его нужно применить в консоли?

  3. доброго времени!
    ./certroutine.sh genkey проходит нормально, а ./certroutine.sh gencsr выдаёт следущее
    [v3_req]
    basicConstraints= CA:FALSE
    keyUsage= nonRepudiation, digitalSignature, keyEncipherment
    unable to find ‘distinguished_name’ in config
    problems making Certificate Request
    139891754239904:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:335:group=req name=distinguished_name
    Error opening Certificate /etc/pki/tls/certs/free-adm.ru.crt
    140250715817888:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen(‘/etc/pki/tls/certs/free-adm.ru.crt’,’r’)
    140250715817888:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
    unable to load certificate

    я как понимаю ещё чего-то не хватает, а вот чего не совсем понятно

    • Есть подозрение что у вас старый openssl, который не понимает формат нового конфига.
      Можете попробовать изменить формат конфига в скрипте используя второй каммент вот этого бага.

  4. yum list installed | grep openssl
    openssl.x86_64 1:1.0.1e-42.el7.4 @updates
    openssl-libs.x86_64 1:1.0.1e-42.el7.4 @updates
    По приведённой вами ссылке у меня ничего не вышло (может руки кривоваты, и кривизны извилин не хватает). Система недавно поставлена и обновлена. А точно не нужно настраивать openssl перед использованием этого скрипта?

  5. спасибо отлично работает

  6. Скрипт не проходит. Пишет команда не найдена — $’\r’ в 7 и 27 строке. Ошибка синтаксиса — ‘$'{\r» ‘createconfig() { в 58 строке.

  7. line 7: $’\r’: команда не найдена
    line 27: $’\r’: команда не найдена
    line 58: syntax error near unexpected token $'{\r»
    line 58: createconfig() {
    выскакивают такие ошибки при выполнении скрипта.

    openssl.x86_64 1:1.0.1e-42.el7.9 @updates
    openssl-libs.x86_64 1:1.0.1e-42.el7.9 @updates

  8. j3149010@trbvm.com
    26.01.2016 - 21:41

    У Вас отсутсвует одна строка

    # ./certroutine.sh genpem

  9. Где её прописать?

  10. Команда ./certroutine.sh genkey прокатила.
    Команда ./certroutine.sh gencrt выдаёт ошибку.

  11. Ругается на параметры команды rm и ln в тексте:
    gencrt() {
    umask 77
    [ ! -f $KEY ] && genkey
    createconfig
    $OPENSSL req $UTF8 -new -key $KEY -x509 -days $DAYS -out $CRT $CONFIG -set_serial $SERIAL
    rm -f $CNF
    CRTHASH=`openssl x509 -hash -noout -in $CRT`.0
    rm -f ${TLSROOT}/certs/$CRTHASH
    ln -s $CN.crt ${TLSROOT}/certs/$CRTHASH
    return 0

    Здесь всё верно прописано?

  12. Сайт хоть живой?

    • Когда как.

      • Подскажи, если не сложно по скрипту, в нем всё верно? На Centos 7 не проходит команда /certroutine.sh gencrt .
        Ругается на параметры команды rm и ln в тексте:
        gencrt() {
        umask 77
        [ ! -f $KEY ] && genkey
        createconfig
        $OPENSSL req $UTF8 -new -key $KEY -x509 -days $DAYS -out $CRT $CONFIG -set_serial $SERIAL
        rm -f $CNF
        CRTHASH=openssl x509 -hash -noout -in $CRT.0
        rm -f ${TLSROOT}/certs/$CRTHASH
        ln -s $CN.crt ${TLSROOT}/certs/$CRTHASH
        return 0
        Если в коде все верно прописано буду ковыряться с правами.
        Возможно система блокирует эти 2 команды.
        Из-за них всё дело встало.

        • А блок User Settings весь заполнен?

          • Да, весь.

          • Хорошо, завтра проверю скрипт ещё раз.

          • Команда ./certroutine.sh genkey прокатила.
            Команда ./certroutine.sh gencrt выдаёт ошибку.

          • Буду ковырять дальше, видимо дело в правах доступа.
            Ругается на параметры команды rm и ln

          • Я из под рута выполнял.

          • Я тоже из-под рута.

          • Добавьте в скрипт echo перед командой, которая выполняется с ошибкой. Будет понятно что там пытается выполниться.

          • В какой папке должен находится скрипт во время запуска?
            Может что-то с правами доступа на папку.

          • Не важно в какой.

          • Может в настройках ~/.bashrc что-то неверное прописано, настраивал с этого сайта.

          • rm: invalid option — ‘x’
            Try ‘rm —help’ for more information.
            ln: invalid option — ‘x’
            Try ‘ln —help’ for more information.

          • [root@art-computers `]# ./certroutine.sh gencrt
            -bash: ./certroutine.sh: Perrmission denied

            Доступ запрещён

          • Перед CRTHASH знак $ не должен стоять?

            ./certroutine.sh: line 162: =openssl -x509 -hash -noout -in $CRT.0: command not found
            rm: cannot remove ‘/etc/pki/tls/certs/’: Is a directory
            ln: failed to create symbolic link ‘/etc/pki/tls/certs/www.art-computers.ru.crt’: File exists
            [root@art-computers home]#

          • Не должен, потому что мы переменной присваиваем значение, а не используем его. Писать нужно:
            TEMP="bla-bla-bla"
            но
            echo $TEMP

          • Понял, спасибо.

          • Если не сложно скинь файл скрипта чтобы я выявил в чем ошибка.
            art.computers@yandex.ru

          • Может в SELINUX надо что-нить поправить?

  13. Большое спасибо.

  14. Игорь
    25.08.2016 - 14:33

    Предлагаю добавить в статью про letsencrypt, так будет и по взрослому и просто))
    Автору спасибо!

  15. wget https://www.startssl.com/certs/sub.class1.server.ca.pem
    —2017-10-04 14:19:09— https://www.startssl.com/certs/sub.class1.server.ca.pem
    Распознаётся http://www.startssl.com (www.startssl.com)… 104.192.110.234
    Подключение к http://www.startssl.com (www.startssl.com)|104.192.110.234|:443… соединение установлено.
    ОШИБКА: Нет доверия сертификату для «www.startssl.com».
    ОШИБКА: Сертификат «www.startssl.com» неизвестно кем выпущен.

Добавить комментарий