Https how-to

Продолжим допиливать бложик и прикрутим к нему https.

Сертификат

Получим бесплатный сертификат на startssl.com. Не забудем не наступить на грабли.

Скачиваем и подмешиваем промежуточный сертификат startssl (2):

wget https://www.startssl.com/certs/sub.class1.server.ca.pem

cat ks1v.com.crt sub.class1.server.ca.pem > ks1v.com.bundled.crt

Ключ и сертификат кладем на сервер, например в /etc/nginx/ssl/ (главное, что бы nginx мог до них дотянуться).

Nginx

Правим конфиг nginx (1):

server {

  listen 80;
  listen [::]:80 default ipv6only=on;

  root /home/ks1v/blog/output;
  server_name ks1v.com;
  index index.html index.htm;
  rewrite ^ https://$http_host$request_uri? permanent;

}

server {

  listen 443 ssl;

   root /home/ks1v/blog/output;
   server_name ks1v.com;
   index index.html index.htm;

   # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
   ssl_certificate     /etc/nginx/ssl/ks1v.com.bundled.crt;
   ssl_certificate_key /etc/nginx/ssl/ks1v.com.key;
   ssl_session_timeout 5m;
   ssl_session_cache shared:SSL:2m;

   # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
   ssl_dhparam /etc/nginx/ssl/ks1v.com.pem;

   # Intermediate configuration. tweak to your needs.
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128;
   ssl_prefer_server_ciphers on;

   # Enable this if your want HSTS (recommended)
   add_header Strict-Transport-Security max-age=15768000;

   # OCSP Stapling ---
   # fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;

   resolver 8.8.8.8;

}

> sudo service nginx restart

Результат. (3)

И да, при любой перезагрузке придется вручную запускать nginx с вводов PEM pass phrase. Неудобно, конечно, но мы не ищем легких путей.

Pelican

Правим конфиг pelican'a:

SITEURL = 'https://ks1v.com'

Disqus

Дискас сам себя не заведет, ведь по умолчанию грузится по http и с этим явно тоже нужно что то делать (4). Находим, где же в вашей теме забурился его скрипт. У меня он нашелся в

/usr/local/lib/python2.7/dist-packages/pelican/themes/monospace/templates/article.html.

(Путь можно узнать выполнив pelican-themes -p)

Дискас дружится с https следующей заменой:

dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';

dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js?https';