Настройка Nginx для HTTPS

Настройка HTTPS сводится как правило к указанию в конфиге хоста сертификата и ключа, обычно при инсталяции nginx'a генерятся сертификаты, ключи, в каталоге /etc/nginx/ssl и файл ssl.conf в /etc/nginx, который можно указывать в конфигах хостов.
Пример принудительного https с самоподписанным сертификатом для phpmyadmin
pma.conf
server {
        listen 80;
        # Не забыть повесить хост на порт и указать ssl
        listen 443 ssl;  
        server_name pma.example.com;

        # Добавляем сюда файл в котором указаны ключи
        include /etc/nginx/ssl.conf;  

        # Принудительный https
        if ( $scheme = "http" ) {  
                rewrite ^/(.*)$   https://$host/$1 permanent;
        }

        root /var/www/pma;

        location /
        {
        index  index.php;
        }

        location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        }
}
Для кошерного сертификата необходимы некоторые телодвижения, в плане приведения цепочки сертификатов к одному. Я ставлю сертификаты выданные COMODO, как правило это ключ и архив с сертификатами:
pma.example.com.key   << key
-----------------------------------------------
pma.example.com.zip   << архив и его содержимое
AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt
example_com.crt
Содержимое архива собирается таким образом:
cat pma_example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > pma.example.com.crt
На выхлопе у нас будет pma.example.com.crt, который с pma.example.com.key заливаем на сервер и добавляем в конфиг вместо include /etc/nginx/ssl.conf;
        ssl_certificate         /etc/nginx/ssl/pma.example.com.crt;
        ssl_certificate_key     /etc/nginx/ssl/pma.example.com.key;
Немного о том как работает HTTPS
Опустим установление TCP соединения...
Первое что происходит это клиент говорит какие версии протокола TLS/SSL и какие шифры он поддерживает, после сервер отвечает выбраной версией протокола и шифра + отсылает публичный сертификат, клиент проверяет его и генерит ключ сессии (сеанса), который отправляет обратно серверу и далее этот ключ используется для шифрования.
Для наглядности:
HTTPS

  • Установка TCP соединения
  • Клиент посылает:
    • Какие версии протокола (ssl/tls) он поддерживает
    • Список шифров которые поддерживает
  • Сервер посылает
    • Выбраную версию протокола
    • Выбраный шифр
    • Сертификат
  • Клиент
    • Проверяет сертификат
    • Обменивается ключами RSA/DH
  • Сервер
    • Принимает обмен ключами
    • Проверяет message authentification code
    • Отправляет первое шифрованое сообщение "Finished"
  • Далее уже идет шифрованый HTTP request и HTTP response

Cсылки:
Настройка TLS, шифров и прочие полезные штуки.
Неплохое видео по данной тематике.
GCR - либа для отображения информации о сертификатах.