Подскажите пожалуйста как подружить OpenSSL 0.9.7f и Apache 2.0.53 ?Пробовал настраивать по нескольким докам (по четырём - все отсюда) и всё равно работать браузер (проверял на lynx и Konquerror) через HTTPS отказывался...
--------------------------------------
Сертификаты создавал следующим образом
--------------------------------------1. Создание закрытого ключа и самоподписанного сертификата:
$ openssl req -new -newkey rsa:4096 -nodes -keyout ca.key -x509 -days 3000 \
-subj /C=RU/L=SPB/O=Home/CN=secure.my-tests -out ca.crtВ результате появляется 2 файла:
ca.key - закрытый ключ
ca.crt - самоподписанный сертификат2. Создание сертификата сервера:
1) создаём конфиг "ca.config"
[ ca ]
default_ca = CA_DEFAULT[ CA_DEFAULT ]
dir = ./db # каталог для служебных файлов
certs = $dir/certs # каталог для сертификатов
new_certs_dir = $dir/newcerts # каталог для новых сертификатовdatabase = $dir/index.txt # файл с БД подписанных сертификатов
serial = $dir/serial # файл с серийником сертификата (HEX)
certificate = ./ca.crt # файл сертификата CA
private_key = ./ca.key # файл закрытого ключа CA
RANDFILE = /var/log/messagesdefault_days = 3650 # срок действия подписываемого сертификата
default_crl_days = 7 # срок действия CRL
default_md = md5 # алгоритм подписи# Название секции с описанием политики в отношении данных сертификата
policy = policy_anything[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied # должен содержать имя домена - обязателен
emailAddress = optional2) создаём структуру каталогов
$ mkdir db
$ mkdir db/certs
$ mkdir db/newcerts
$ touch db/index.txt
$ echo "01" > db/serial3) создание серверного закрытого ключа и запроса на сертификат:
$ openssl req -new -newkey rsa:4096 -nodes -keyout server.key \
-subj /C=RU/L=SPB/O=Home/CN=secure.my-tests -out server.csrВ результате появляется 2 файла:
server.key - закрытый ключ сервера
server.csr - запрос на сертификат4) подпись запроса на сертификат (CSR) с помощью доверенного сертификата (CA)
$ openssl ca -config ca.config -in server.csr -out server.crt -batch
В результате появляется файл сертификата "server.crt"
5) подготовка данных для передачи клиенту (этот шаг даже и не знаю, нужен или нет)
$ openssl pkcs12 -export -in server.crt -inkey server.key -certfile ca.crt \
-out server.p12 -passout pass:123456---------------------------------------
Файл "/usr/local/apache2/conf/ssl.conf"
---------------------------------------SSLRandomSeed startup builtin
SSLRandomSeed connect builtin<IfDefine SSL>
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache2/logs/ssl_mutex<VirtualHost _default_:443>
DocumentRoot "/www/secure.my-tests"
ServerName secure.my-tests:443
ServerAdmin cs@localhost
ErrorLog /usr/local/apache2/logs/secure_error_log
TransferLog /usr/local/apache2/logs/secure_access_logSSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULLSSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/ca.crtSSLVerifyClient require
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/www/secure.my-tests">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /usr/local/apache2/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"</VirtualHost>
</IfDefine>-----------------
В эррор-секьюр-логе (/usr/local/apache2/logs/secure_error_log) после остановки и запуска индейца с новыми параметрами было следующее:
[Sat Apr 09 04:07:34 2005] [warn] Init: Oops, you want to request client authentication, but no CAs are known for verification!? [Hint: SSLCACertificate*]
--------------------------------------------------------------------------
Если где-чего напутал тыкните пальцем.
Как с этим справиться ? Как заставить lynx (или любой другой браузер) работать через HTTPS ?
Убери строку SSLVerifyClient require, если она не нужна.Просто пишешь https://url и все, если браузер поддерживает ssl...
>Убери строку SSLVerifyClient require, если она не нужна.
Спасибо -- это помогло. :)А как избавиться от сообщений об ошибках ?
lynx при запуске (lynx https://localhost) говорит:SSL error: self signed certificate-Continue? (y)
Ошибка SSL: host(localhost) != cert(secure.my-tests)-Продолжить? (y)Дальше всё нормально, сайт грузится.
А Konqueror говорит такую бяку:
"Сертификат сервера не прошёл проверку подлинности (localhost)" и две кнопки "Подробности" и "Продолжить". Нажал "Подробности", а там красным цветом выделено:
"Сертификат подписан самой стороной и поэтому не может быть достоверным. Сертификат не был выпущен для этого узла."
Правда в Konqueror я импортировал файл "server.p12" полученный на шаге 5).
1. Пятый шаг тебе скорее всего не нужен. Хотя если собираешься раздавать сертификаты виндовым клиентам, то придется конвертить их в PFX.>"Сертификат сервера не прошёл проверку подлинности (localhost)" и две кнопки "Подробности" и
>"Продолжить". Нажал "Подробности", а там красным цветом выделено:
>
>"Сертификат подписан самой стороной и поэтому не может быть достоверным. Сертификат не
>был выпущен для этого узла."Это потому что в CommonName у тебя стоит secure.my-tests, а имя сервера - localhost. Надо чтоб они были одинаковы, тогда браузер заткнется.
>Правда в Konqueror я импортировал файл "server.p12" полученный на шаге 5).
Надо импортировать корневой, а не серверный, тогда все остальные подписанные им будут считаться доверенными.
PS. Еще желательно добавить опции -policy policy_anything и -extensions usr_cert, когда подписываешь, и соответственно добавить [usr_cert] в файл ca.config.
>Надо импортировать корневой, а не серверный, тогда все остальные подписанные им будут
>считаться доверенными.
ОК, импортировал корневой -- Konqueror больше не матерится.
А lynx по прежднему жалуется "SSL error: self signed certificate in chain-Continue? (y)".>PS. Еще желательно добавить опции -policy policy_anything
Добавил... выполнил:
$ openssl ca -config ca.config -policy policy_anything -in server.csr -out server.crt -batch
>и -extensions usr_cert, когда подписываешь, и соответственно добавить [usr_cert] в файл ca.config.
А вот с этим не попонял -- дописал в ca.config:[ usr_cert ]
basicConstraints = CA:FALSE
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always[ req ]
default_bits = 4096
default_keyfile = server.key
distinguished_name = req_distinguished_name
prompt = no[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (host name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64а дальше какую команду выполнять?
>А lynx по прежднему жалуется "SSL error: self signed certificate in chain-Continue?
>(y)".Тут к сожалению ничем помочь не могу - я lynxом не пользовался очень давно, даже не знал, что там поддержка SSL появилась.
>А вот с этим не попонял -- дописал в ca.config:
>
>[ usr_cert ]
>basicConstraints = CA:FALSE
>nsComment = "OpenSSL Generated Certificate"
>subjectKeyIdentifier = hash
>authorityKeyIdentifier = keyid,issuer:always
>
>[ req ]
>default_bits = 4096
>default_keyfile = server.key
>distinguished_name = req_distinguished_name
>prompt = no
>
>[ req_distinguished_name ]
>countryName = Country Name (2 letter code)
>countryName_default = RU
>countryName_min = 2
>countryName_max = 2
>stateOrProvinceName = State or Province Name (full name)
>localityName = Locality Name (eg, city)
>organizationName = Organization Name (eg, company)
>organizationalUnitName = Organizational Unit Name (eg, section)
>commonName = Common Name (host name)
>commonName_max = 64
>emailAddress = Email Address
>emailAddress_max = 64
>
>а дальше какую команду выполнять?просто нужно добавить еще "-extensions usr_cert" в команду:
$ openssl ca -config ca.config -policy policy_anything -in server.csr -out server.crt -batch
т.е. получится типа:
openssl ca -config ca.config -policy policy_anything -extensions usr_cert -in server.csr -out server.crt -batch
>т.е. получится типа:
>
>openssl ca -config ca.config -policy policy_anything -extensions usr_cert -in server.csr -out server.crt
>-batchОК, получилось... команда прошла. :)
Спасибо за ответы ;)