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://u...@myvps.com OG> lftp u...@myvps.com:~> ls OG> -rw-r----- 1 ftp ftp 276 Nov 24 20:16 index.html OG> lftp u...@myvps.com:/> exit OG> without:: OG> $ lftp -e 'set ssl:verify-certificate no' ftp://u...@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, сертификат считается непригодным для этого хоста).