zoukankan      html  css  js  c++  java
  • centos使用openssl生成自签名SSL证书并配置到nginx

    检查OpenSSL

    检查是否已经安装openssl:

    openssl version

    一般在CentOS7上,openssl已经默认安装好了。

    生成自签名的SSL证书和私钥

    第一步:生成私钥

    新建/etc/ssl/certs/www.ffcc.com目录并进入,后执行命令:

    openssl genrsa -des3 -out server.key 2048

    输入一个4位以上的密码。

    第二步:生成CSR(证书签名请求)

    openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=mofei/OU=mofei/CN=www.ffcc.com"

    subj参数说明如下:

    字段 字段含义 示例
    /C= Country 国家 CN
    /ST= State or Province 省 Zhejiang
    /L= Location or City 城市 Hangzhou
    /O= Organization 组织或企业 mofei
    /OU= Organization Unit 部门 mofei
    /CN= Common Name 域名或IP www.ffcc.com

     

     

     

     

     

     

     

     

     

     

     

     

    第三步:去除私钥中的密码

    在第1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次启动Web服务器时,都会要求输入密码,

    这显然非常不方便。要删除私钥中的密码,操作如下:

    openssl rsa -in server.key -out server.key

    第四步:生成自签名SSL证书

    # -days 证书有效期-天
    openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

    需要用到的证书文件为:server.crt 和 server.key

    X.509证书包含三个文件:key,csr,crt。

    key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
    csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
    crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
    备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。

    第五步:在nginx配置文件中配置使用ssl证书

    user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        gzip  on;
    
        server {
            listen       80;
            server_name  www.ffcc.com;
            rewrite ^(.*) https://$server_name$1 permanent;
        }
    
        server {
            listen       443 ssl;
        keepalive_timeout   70;
            server_name  www.ffcc.com;
            location / {
                proxy_pass http://127.0.0.1:65432/v2ui;
                proxy_redirect default;
                client_max_body_size 10m; #表示最大上传10M,需要多大设置多大。
                #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Scheme $scheme;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
            ssl_certificate      /etc/ssl/certs/www.ffcc.com/server.crt;
            ssl_certificate_key  /etc/ssl/certs/www.ffcc.com/server.key;
            #减少点击劫持
            add_header          X-Frame-Options DENY;
            #禁止服务器自动解析资源类型
            add_header          X-Content-Type-Options nosniff;
            #防XSS攻击
            add_header          X-Xss-Protection 1;
            #优先采取服务器算法
            ssl_prefer_server_ciphers on;
            #
            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers         HIGH:!aNULL:!MD5;
            ssl_session_cache   shared:SSL:10m;
            ssl_session_timeout 10m;
        }
    
    }

    但是这么做并不安全,默认是 SHA-1 形式,而现在主流的方案应该都避免 SHA-1,为了确保更强的安全性,我们可以采取迪菲-赫尔曼密钥交换

    首先,进入/etc/ssl/certs/www.ffcc.com目录并生成一个dhparam.pem

    openssl dhparam -out dhparam.pem 2048 # 如果你的机器性能足够强大,可以用 4096 位加密

    所以最终的配置如下:

    user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        gzip  on;
    
        server {
            listen       80;
            server_name  www.ffcc.com;
            rewrite ^(.*) https://$server_name$1 permanent;
        }
    
        server {
            listen       443 ssl;
        keepalive_timeout   70;
            server_name  www.ffcc.com;
            location / {
                proxy_pass http://127.0.0.1:65432/v2ui;
                proxy_redirect default;
                client_max_body_size 10m; #表示最大上传10M,需要多大设置多大。
                #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Scheme $scheme;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
            ssl_certificate      /etc/ssl/certs/www.ffcc.com/server.crt;
            ssl_certificate_key  /etc/ssl/certs/www.ffcc.com/server.key;
            #减少点击劫持
            add_header          X-Frame-Options DENY;
            #禁止服务器自动解析资源类型
            add_header          X-Content-Type-Options nosniff;
            #防XSS攻击
            add_header          X-Xss-Protection 1;
            #优先采取服务器算法
            ssl_prefer_server_ciphers on;
            #使用DH文件
            ssl_dhparam         /etc/ssl/certs/www.ffcc.ml/dhparam.pem;
            #协议
            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
            #加密方式
            ssl_ciphers         "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+a
    RSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
            #
            ssl_session_cache   shared:SSL:10m;
            ssl_session_timeout 10m;
        }
    
    }

    注意

    自签名的SSL证书存在安全隐患,在生产环境上需要购买和使用经权威机构认证和办法的证书。

  • 相关阅读:
    idea 中使用 svn
    [剑指offer] 40. 数组中只出现一次的数字
    [剑指offer] 39. 平衡二叉树
    [剑指offer] 38. 二叉树的深度
    [剑指offer] 37. 数字在排序数组中出现的次数
    [剑指offer] 36. 两个链表的第一个公共结点
    [剑指offer] 35. 数组中的逆序对
    vscode在win10 / linux下的.vscode文件夹的配置 (c++/c)
    [剑指offer] 34. 第一个只出现一次的字符
    [剑指offer] 33. 丑数
  • 原文地址:https://www.cnblogs.com/007sx/p/12583675.html
Copyright © 2011-2022 走看看