zoukankan      html  css  js  c++  java
  • openssl创建的自签名证书,使用自签发证书--指定使用多域名、泛域名及直接使用IP地址

    openssl创建的自签名证书,使用自签发证书--指定使用多域名、泛域名及直接使用IP地址

    在开发环境及私有环境下需要使用SSL,于是创建自签发证书,而必须支持多域名、泛域名、直接IP访问

    1. Nginx的ssl模块安装

    详情步骤参考:https://www.cnblogs.com/haolb123/p/15030631.html

    2. nginx加入systemd管理

    在目录/lib/systemd/system中增加文件:nginx.service内容如下:

    [Unit]
    Description=nginx
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target

    systemctl enable nginx.service   设置开机启动。

    3. 使用openssl生成证书自签名

    openssl在centos中是标配,所以直接在centos中操作,因为要多个域名和IP,故而需要编辑一个配置文件,如下:

    [root@centos7 ~]# vim req.cnf
    

    # 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
    distinguished_name = req_distinguished_name

    # 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
    x509_extensions = v3_req

    # 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
    prompt = no


    [req_distinguished_name]
    #国家代码,一般都是CN(大写)
    C = CN
    #省份
    ST = Beijing
    #城市
    L = Beijing
    #企业/单位名称
    O = oyz
    #企业部门
    OU = oyz
    #证书的主域名
    CN = 192.168.8.190

    ##### 要加入到证书请求中的一系列扩展项 #####
    [v3_req]
    keyUsage = critical, digitalSignature, keyAgreement
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names


    [ alt_names ]
    DNS.1 = oyz.com
    DNS.2 = *.oyz.com
    DNS.3 = www.flymot.com
    DNS.4 = *.oyz.com
    IP.1 = 192.168.8.190
    IP.2 = 192.168.1.190

    
    [root@centos7 ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/nginx/ssl/private.key -out /usr/local/nginx/ssl/nginx.crt -config req.cnf -sha256

    openssl 命令参数说明:

    req          大致有3个功能:生成证书请求文件、验证证书请求文件和创建根CA
    -x509        说明生成自签名证书
    -nodes       openssl req在自动创建私钥时,将总是加密该私钥文件,并提示输入加密的密码。可以使用"-nodes"选项禁止加密私钥文件。
    -days        指定所颁发的证书有效期。
    -newkey      实际上,"-x509"选项和"-new"或"-newkey"配合使用时,可以不指定证书请求文件,它在自签署过程中将在内存中自动创建证书请求文件
                  "-newkey"选项和"-new"选项类似,只不过"-newkey"选项可以直接指定私钥的算法和长度,所以它主要用在openssl req自动创建私钥时。
    rsa:2048     rsa表示创建rsa私钥,2048表示私钥的长度。
    -keyout      指定私钥保存位置。
    -out         新的证书请求文件位置。
    -config      指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf中req段落的值

    4. 配置nginx

    [root@centos7 ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       8081 ssl;
        server_name  192.168.8.190;
    
        ssl on;
        ssl_certificate      /usr/local/nginx/ssl/nginx.crt;
        ssl_certificate_key  /usr/local/nginx/ssl/private.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
            root   html;
            error_page   500 502 503 504  /50x.html;
            index  index.html index.htm;
        }
    }

    5. 启动nginx

    [root@centos7 nginx]# systemctl start nginx
    [root@centos7 nginx]# ss -ant | grep 8081
    LISTEN     0      128          *:8081                    *:*
    此时访问会出现如下问题

    image

    6. 在Windows中导入证书

    image

    image

    image

    7. 测试效果

    image


    参考链接:

    https://www.cnblogs.com/f-ck-need-u/p/7113610.html

    https://www.cnblogs.com/lzpong/p/13030886.html

    https://www.cnblogs.com/jzbgltb/p/9967069.html

    https://www.iteye.com/blog/dead-knight-1941716

  • 相关阅读:
    一次脑残的记录: Linux 中实时任务调度与优先级
    这 7 个 Linux 命令,你是怎么来使用的?
    物联网设备OTA软件升级之:完全升级和增量升级
    物联网设备OTA软件升级之:升级包下载过程之旅
    Linux应用程序设计:用一种讨巧方式,来获取线程栈的使用信息
    Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索
    应用程序设计:在动态库中如何调用外部函数?
    Typescript学习笔记
    gRPC 重试策略
    Gogs+Jenkins+Docker 自动化部署.NetCore
  • 原文地址:https://www.cnblogs.com/haolb123/p/15034897.html
Copyright © 2011-2022 走看看