nginx 搭建ssl完整笔记

还记得当初为了让博客支持SSL,可是找了很多资料啊,有时候一篇资料写的不够仔细就又要重新找,经过反复的摸索,以及查找资料,最后还是把SSL搭建好了。记录操作过程以待备用。

搭建SSL最主要的还是证书,没有证书肯定是不能弄起来的,很早接触的证书是沃通,当时别人介绍他提供免费证书,对于普通站点来说是可以的。但是后来苦于沃通证书申请麻烦之至,时间也很慢,无奈弃之,最后转辗反侧知道了 Startssl 这个证书,当时知道这个是在手机上,电脑并不在身边,用手机完成了账号注册,然并不知道这个网站登录是需要证书登录。最后放之。

当时搭建SSL是想着把该有的东西都弄齐,最后购买云服务器(当时使用的虚拟机),希望一举成功。沉默的半个月终于决定搞SSL。在阿里购买的云服务器,当时又是一阵懵逼,不会搭建环境,花了两个小时时间找了资料,选择的方案是Lnmp(Linux,nginx,mysql,php),试着安装几次后,失败了。又懵了,再找了找相关的资料,试了几下,失败。最后打算就这样了。

逛了几个小时的博客及网站,意外发现了一键安装包(军哥lnmp一键安装包)。但是奔着死马当活马医的,不曾想,环境装好了。嗯,添加虚拟空间绑定域名,访问没有问题,把网站文件迁了过去。最后搞起SSL。在 Startssl 获取个人证书后,导入浏览器,重启浏览器.....省略五百字

修改nginx配置文件。

server {
    listen 80 default_server;
    server_name aimuz.me; #改为自己域名,由http跳转为https
    return 301 https://uploads.aimuz.me$request_uri;
}
server {
    listen 443 ssl;
    #listen [::]:443 ssl;
    server_name aimuz.me; 
    ssl_certificate /usr/local/nginx/conf/vhost/ssl/me.crt; # 证书路径
    ssl_certificate_key /usr/local/nginx/conf/vhost/ssl/yourname.key; # 证书密钥文件,申请时输入的
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
    # ssl_dhparam /usr/local/nginx/conf/vhost/ssl/dhparam.pem; 

    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; # 启用HSTS

    .....
}

opensll 生成 key文件

openssl req -newkey rsa:2048 -keyout yourname.key -out yourname.csr

申请证书的时候复制 yourname.csr 文件内容即可。

nginx 参数说明
ssl_certificate 证书文件路径,包含文件名如:
ssl_certificate /usr/local/nginx/conf/vhost/ssl/me.crt;
ssl_certificate_key 证书密钥路径,包含文件名如:
ssl_certificate_key /usr/local/nginx/conf/vhost/ssl/yourname.key; 
ssl_dhparam dhparam文件 可不需要
ssl_dhparam /usr/local/nginx/conf/vhost/ssl/dhparam.pem;

利用OpenSSL生成dhparam 文件

openssl dhparam -out dhparam.pem 2048

好像就这样了,完了

https://mozilla.github.io/server-side-tls/ssl-config-generator/

https://www.ssllabs.com/ssltest/analyze.html?d=aimuz.me