Archive

Posts Tagged ‘ssl’

Настройка SSL в nginx

December 9th, 2009

В nginx настроить SSL для домена еще проще чем в Апаче. Для начала генерим закрытый ключ, запрос на сертификат и подписываем его как указано в статье настройка SSL на Apache

Теперь конфиг:

server {
        listen 1.2.3.1:443;
        keepalive_timeout    70;

        server_name .domain.com;

        ssl                  on;
        ssl_protocols        SSLv3 TLSv1;
        ssl_ciphers          AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate      /etc/nginx/vhosts/www.domain.crt;
        ssl_certificate_key  /etc/nginx/vhosts/www.domain.key;
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  20m;

        location ~* \.(JPG|jpg|jpeg|gif|png|ico|zip|doc|gz|rar|bz2|swf|avi|mpg|vmw|wmv|mpeg|mkv|js)$ {
            root /usr/local/www/domain.com;
            expires max;
        }

        location / {
            proxy_pass         http://127.0.0.1:80/;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For $remote_addr;
        }
    }

Нюансы такие:
Файл с закрытым ключем придется делать без пароля. Если он у вас с паролем, то снять пароль можно так:

openssl rsa -in key.pem -out keyout.pem

Ну и если вы делаете нормальные подписанные авторитетными CA сертификаты уникальные для каждого домена, то не забыть вешать каждый домен на отдельный ип.
На апаче в такой конфигурации вообще ничего изменять не нужно и до апача доходит уже расшифрованный трафик.

nginx ,

Простая настройка SSL в Apache

July 1st, 2009

Сертификаты бывают на один домен (будет работать только для mydomain.com или только для www.mydomain.com) и мультидоменные (*.mydomain.com). Мультидоменные стоят много дороже. В нашем случае рассматриваются сертификаты на один домен.
Генерим закрытый ключ и запрос на сертификат:

openssl genrsa –des3 –out mydomain.com.key 1024
openssl req -new -key mydomain.com.key -out mydomain.com.csr

Самое важное это указать Common name = mydomain.com. Остальные поля не так важны. Всякие Optional-поля лучше вообще не указывать.
На данном этапе если хотим подписать сертификат доверенным центром сертификации то отправляем им mydomain.com.csr. А если будем подписывать сами, то:

openssl x509 -req -days 365 -in mydomain.com.csr -signkey mydomain.com.key -out mydomain.com.crt

И базовый ssl.conf для примера:

SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
# If you use secret phrase
SSLPassPhraseDialog  exec:/usr/local/etc/apache2/certs/domain.com.pass
SSLSessionCache         dbm:/var/run/ssl_scache
SSLSessionCacheTimeout  300
SSLMutex  file:/var/run/ssl_mutex

<VirtualHost 192.168.0.1:443>
<Directory /home/domain.com/htdocs>
    Order Allow,Deny
    Allow from all
</Directory>

DocumentRoot "/home/domain.com/htdocs"
ServerName domain.com:443
ServerAdmin you@example.com
ErrorLog /home/logs/httpsd-error.log
TransferLog /home/logs/httpsd-access.log
SSLEngine on

SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM

SSLCertificateFile /usr/local/etc/apache2/certs/domain.com.crt
SSLCertificateKeyFile /usr/local/etc/apache2/certs/domain.com.key

<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/home/domain.com/htdocs">
    SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog /home/logs/httpd-ssl_request.log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

Apache ,

Простая настройка SSL на Apache

July 1st, 2009

Генерим закрытый ключ и запрос на сертификат.

openssl genrsa –des3 –out mydomain.com.key 1024
openssl req -new -key mydomain.com.key -out mydomain.com.csr

Когда генерим CSR то не надо указывать e-mail, challenge password и дополнительные опции.
Если мы хотим подписать сертификат доверенным центром сертификации, то отправляем им mydomain.com.csr. Если же будем подписывать сами то:

openssl x509 -req -days 365 -in mydomain.com.csr -signkey mydomain.com.key -out mydomain.com.crt

И базовый ssl.conf для примера:

SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
# If you use secret phrase
SSLPassPhraseDialog  exec:/usr/local/etc/apache2/certs/domain.com.pass
SSLSessionCache         dbm:/var/run/ssl_scache
SSLSessionCacheTimeout  300
SSLMutex  file:/var/run/ssl_mutex

<VirtualHost 192.168.0.1:443>
<Directory /home/domain.com/htdocs>
    Order Allow,Deny
    Allow from all
</Directory>

DocumentRoot "/home/domain.com/htdocs"
ServerName secure.domain.com:443
ServerAdmin you@example.com
ErrorLog /home/logs/httpsd-error.log
TransferLog /home/logs/httpsd-access.log
SSLEngine on

SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM

SSLCertificateFile /usr/local/etc/apache2/certs/domain.com.crt
SSLCertificateKeyFile /usr/local/etc/apache2/certs/domain.com.key

<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/home/domain.com/htdocs">
    SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog /home/logs/httpd-ssl_request.log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

Apache ,

Отключение SSLv2 в mod_ssl

April 8th, 2009

SSLv2 уже давно не обеспечивает приемлемого уровня безопасности и поэтому желательно отключить его в mod_ssl. Для этого в виртуалхосте апача надо прописать:

SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM

Рестартуем Апач и проверяем:

/usr/bin/openssl s_client -state -debug -ssl2 -connect mysite.com:443

Должна появиться ошибка в невозможности хэндшейка.
А так должно нормально подключиться:

/usr/bin/openssl s_client -state -debug -ssl3 -connect mysite.com:443

Apache, безопасность ,