Re: proftpd + inetd + ssl/tls и другие вопросы.
Oleksandr Gavenko -> debian-russian@lists.debian.org @ Wed, 25 Nov 2015 01:50:18 +0200:
Вот меня в нижеприведенном прям смущает, что конфиг совсем
минималистичный. openssl нынче что, сам догадывается поставить
правильное назначение сертификата в зависимости от того, делают его
самоподписанным или подписывают заявку?
Можно посмотреть вывод openssl x509 -text -noout этих обоих сертификатов
в части X509v3 extensions?
У меня для сертификата CA там показывают
X509v3 Basic Constraints:
CA:TRUE
X509v3 Key Usage:
Certificate Sign, CRL Sign
а для сертификата сервера
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
X509v3 Extended Key Usage:
TLS Web Server Authentication
OG> В общем ниже сырой материал, подготовленый для блогозаписи.
OG> Может есть проще (я встречал упоминание о ca.pl скрипте) но так сработало.
OG> openssl.cnf подбирал копированием /usr/lib/ssl/openssl.cnf подряд по
OG> выпадающим ошибкам от "openssl ca". Остальное извлек из кучи вкладок браузера.
OG> Я тоже занимался криптографией (БИФИТ, оптимизация криптопримитивов), но
OG> сменил работу в то время как подоспели прикладные задачи (связать примитивы в
OG> публичные API и PKI), не успел помучится с x509 и PKI ))
OG> ================================================================
OG> Create CA root self-signed certificate::
OG> $ openssl req -x509 -sha256 -days 1000 -nodes -newkey rsa:4096 -keyout
OG> ca-root-key.pem -out ca-root-cert.pem
OG> ...
OG> $ ls ca-root-*.pem
OG> ca-root-cert.pem ca-root-key.pem
OG> Dump content::
OG> $ openssl x509 -text -noout -in ca-root-cert.pem
OG> ...
OG> $ openssl pkey -text -noout -in ca-root-key.pem
OG> ...
OG> Check certificate purpose::
OG> $ openssl x509 -purpose -in ca-root-cert.pem
OG> ...
OG> Generate server key and certificate::
OG> $ openssl req -sha256 -days 1000 -nodes -newkey rsa:4096 -keyout server-key.pem -out server-cert.csr
OG> $ ls server-*.pem
OG> server-cert.csr server-key.pem
OG> Dump content::
OG> $ openssl req -text -noout -in server-cert.csr
OG> ...
OG> $ openssl pkey -text -noout -in server-key.pem
OG> ...
OG> To fill subject automatically::
OG> $ openssl req -sha256 -days 1000 -nodes -newkey rsa:4096 -subj
OG> "/C=UA/ST=User/L=City/O=Corp/OU=SubCorp/CN=myvps.com" -keyout server-key.pem
OG> -out server-cert.csr
OG> Prepare use minimal ``openssl.cnf``::
OG> [ ca ]
OG> default_ca = CA_default
OG> [ CA_default ]
OG> new_certs_dir = .
OG> database = index.txt
OG> serial = serial.txt
OG> default_md = default
OG> policy = policy_anything
OG> [ policy_anything ]
OG> countryName = optional
OG> stateOrProvinceName = optional
OG> localityName = optional
OG> organizationName = optional
OG> organizationalUnitName = optional
OG> commonName = supplied
OG> emailAddress = optional
OG> Prepare some CA database files::
OG> $ echo 01 > serial.txt
OG> $ touch touch index.txt index.txt.attr
OG> Sign server CSR with CA key::
OG> $ openssl ca -days 1000 -config openssl.cnf -cert ca-root-cert.pem -keyfile
OG> ca-root-key.pem -out server-cert.pem -in server-cert.csr
OG> Dump signed server certificate::
OG> $ openssl x509 -text -noout -in server-cert.pem
OG> ...
OG> Copy CA certificate to Debian tructed store::
OG> $ sudo cp ca-root-cert.pem /usr/share/ca-certificates/my/my-ca-root-cert.crt
OG> and register certificate::
OG> $ sudo dpkg-reconfigure ca-certificate
OG> Copy signed server key + certificate to server and resister it::
OG> $ scp server-key.pem server-cert.pem user@vps
OG> $ ssh user@vps
OG> % sudo cp server-cert.pem /etc/ssl/certs/proftpd.crt
OG> % sudo cp server-key.pem /etc/ssl/private/proftpd.key
OG> After all I can run::
OG> $ lftp ftp://user@myvps.com
OG> lftp user@myvps.com:~> ls
OG> -rw-r----- 1 ftp ftp 276 Nov 24 20:16 index.html
OG> lftp user@myvps.com:/> exit
OG> without::
OG> $ lftp -e 'set ssl:verify-certificate no' ftp://user@myvps.com
OG> Note that ftp:// URL domain name SHOULD match certificate CN name or you get error::
OG> Fatal error: Certificate verification: certificate common name doesn't match
OG> requested host name ‘myvps.com’
Тут есть еще такая штука, как X509v3 Subject Alternative Name. У меня, например,
X509v3 Subject Alternative Name:
DNS:nest.lasgalen.net, DNS:jabber.lasgalen.net, DNS:mail.lasgalen.net
В конфиге это задается
subjectAltName=DNS:nest.lasgalen.net,DNS:jabber.lasgalen.net,DNS:mail.lasgalen.net
Сколь я помню, при наличии subjectAltName CN игнорируется (в смысле,
если имя хоста совпадает с CN, но отсутствует в subjectAltName,
сертификат считается непригодным для этого хоста).
Reply to: