start ssl证书申请

  • 首先在start ssl网站注册一个账号
  • 登录后进入登录页面,点击Validations Wizard,并选择Domain Validation,添加一个新的域名

add_domain.png

  • 点击Certificates Wizard,选择申请Web Server SSL,一直按照向导,进入到填写信息的页面。
  • 填写需要https的域名的主机。只能填同一个域名的,只能最多填5个。第一个会被认为是主host

add_https_host.png

  • 选择使用KPI System生成秘钥,下载生成好的私钥

gen_key.png

  • 证书会很快生成,然后从startssl网站的右边栏点击SSL/TLS的卡片的域名,下载证书文件。

  • 把下载好的私钥上传到服务器上,假设名字是mydomain.secure.key。 解压证书文件,把名字有nginx的crt文件上传到服务器,假设名字是mydomain.crt

配置服务器

  • 生成未加密的private key
openssl rsa -in mydomain.secure.key -out mydomain.key
  • 生成dhparam
openssl dhparam -out dhparams.pem 2048
  • 配置nginx配置文件
    注意nginx的默认ssl配置选项存在诸多漏洞。
server {
    listen 80;
    server_name mydomain.com www.mydomain.com;
    return 301 https://www.mydomain.com$request_uri;
}
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/nginx/certs/mydomain.crt;
    ssl_certificate_key /etc/nginx/certs/mydomain.key;

    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #注意这里不能有SSLv3, SSLv3有严重漏洞
    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-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/certs/dhparams.pem;
....
}
  • 重启nginx服务
sudo nginx -s reload

测试安全性

可以在ssllabs进行检测https配置是否安全