zoukankan      html  css  js  c++  java
  • nginx 配置https并自签名证书


    作者: daodaoliang
    版本: V1.0.1
    邮箱: daodaoliang@yeah.net
    

    参考链接: 这里 和 这里 和 官方文档

    1. 制作服务器证书

    服务器CA私钥:

    openssl genrsa -des3 -out ca.key 2048
    

    制作解密后的CA私钥(一般无此必要):

    openssl rsa -in ca.key -out ca_decrypted.key
    

    ca.crt CA根证书(公钥):

    openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
    

    2. 制作生成网站的证书并用CA签名认证

    在这里,假设网站域名为 www.example.com

    生成 www.example.com 证书私钥:

    openssl genrsa -des3 -out www.example.com.pem 1024
    

    制作解密后的 www.example.com 证书私钥:

    openssl rsa -in www.example.com.pem -out www.example.com.key
    

    生成签名请求:

    openssl req -new -key www.example.com.pem -out www.example.com.csr
    

    在common name中填入网站域名,如 www.example.com 即可生成改站点的证书,同时也可以使用泛域名如 *.example.com 来生成所有二级域名可用的网站证书。

    用CA进行签名:

    openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key -in www.example.com.csr -out www.example.com.crt
    

    其中,policy参数允许签名的CA和网站证书可以有不同的国家、地名等信息,days参数则是签名时限。

    如果在执行签名命令时,出现“I am unable to access the ../../CA/newcerts directory”

    修改/etc/pki/tls/openssl.cnf中“dir = ./CA”

    然后:

    mkdir -p CA/newcerts
    
    touch CA/index.txt
    
    touch CA/serial
    
    echo "01" > CA/serial
    

    再重新执行签名命令。

    最后,把ca.crt的内容粘贴到 www.example.com.crt 后面。这个比较重要!因为不这样做,可能会有某些浏览器不支持。

    好了,现在https需要到的网站私钥 www.example.com.key 和网站证书 www.example.com.crt 都准备完毕。接下来开始配置服务端。

    3. 配置nginx

    新开一个虚拟主机,并在server{}段中设置:

    listen 443;
    
    ssl on;
    
    ssl_certificate /path/to/www.example.com.crt;
    
    ssl_certificate_key /path/to/www.example.com.key;
    

    其中的路径是刚刚生成的网站证书的路径。

    然后使用一下命令检测配置和重新加载nginx:

    检测配置:
    nginx -t
    重新加载:
    nginx -s reload
    

    4. 优化nginx配置

    https和http共存:

    server {
            listen 80;
            listen 443 ssl;
            server_name zou.lu;
            root /var/www/html;
    
            #ssl on;   //这行必须要注释掉
            ssl_certificate /usr/local/nginx/conf/zou_lu.crt;
            ssl_certificate_key /usr/local/nginx/conf/zoulukey.pem;
        }
    

    优化性能:

    在http{}中加入:

    ssl_session_cache shared:SSL:10m;
    
    ssl_session_timeout 10m;
    

    据官方文档所述,cache中的1m可以存放4000个session。

    在配置https的虚拟主机server{}中加入:

    keepalive_timeout 70;
    

    PS:常见错误:

    有时候,会发现,在phpMyAdmin等程序登入后会错误地跳转http的问题。解决方法是定位至“location ~ .*.(php php5)?${}”在include fcgi.conf;或者在fastcgi_param配置后面加上:
    fastcgi_param HTTPS on;
    
    fastcgi_param HTTP_SCHEME https;
    

    http://daodaoliang.com/blog/2016/10/28/nginx%E9%85%8D%E7%BD%AEhttps%E5%B9%B6%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6.html

  • 相关阅读:
    NOIP2011 D1T1 铺地毯
    NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
    POJ 2513 trie树+并查集判断无向图的欧拉路
    599. Minimum Index Sum of Two Lists
    594. Longest Harmonious Subsequence
    575. Distribute Candies
    554. Brick Wall
    535. Encode and Decode TinyURL(rand and srand)
    525. Contiguous Array
    500. Keyboard Row
  • 原文地址:https://www.cnblogs.com/findumars/p/6272225.html
Copyright © 2011-2022 走看看