[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: