• openssl 、nginx生成配置自签名证书


    前言

    在nginx进行https代理的时候是需要配置证书的,通过CA机构获取的证书是收费的,出于研究测试的话可以通过openssl自己制作证书,使用openssl制作证书如下:
    (1)生成CA根证书
    (2)生成服务器证书请求
    (3)通过CA根证书和服务器证书请求生成服务器证书
    服务器证书生成后,便可以在nginx进行配置

    openssl介绍

    linux上的openssl是一个用于生成密钥、公钥,证书,以及进行证书签名的工具。

    生成CA根证书

    配置openssl

    在使用openssl前,首先需要对openssl进行配置,设置好证书的存放目录,序列ID等的存放位置,基本上默认的设置都已经做好了,只需要更改一下dir的值就好

    vim /etc/ssl/openssl.cnf
    

    然后针对于上图的所示的文件结构,创建对应的文件目录和文件

    mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
    touch /etc/pki/CA/{serial,index.txt}
    

    使用tree 命令查看目录结构如下所示:

    woder@woder-pc:/etc$ tree /etc/pki
    /etc/pki
    ├── CA
    │   ├── certs          (已颁发的证书保存目录)
    │   ├── crl              (证书撤销列表存放目录)
    │   ├── index.txt     (数据库索引文件,记录着一些已签署的证书信息)
    │   ├── newcerts    (新签署证书的保存目录)
    │   ├── private        (存放CA私钥的目录)
    │   └── serial        (当前证书序列号)
    

    指定证书编号

    根证书是用来生成服务器证书的,证书之间是存在链式关系,当信任根证书时,由其衍生出来的证书都会被信任。
    从根证书开始每一个证书都有一个对应的编号,是通过serial的值来进行维护的,首先指明证书的开始编号

    echo 01 >> serial
    

    生成CA私钥

    使用umask 077使得之后生成文件的默认权限为077,使用openssl工具生成 4096位的rsa秘钥,该秘钥存放在/etc/pki/CA/private/cakey.pem 中

    umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096
    

    生成CA证书

    使用刚生成的私钥生成CA证书
    req: 这是一个大命令,提供生成证书请求文件,验证证书,和创建根CA
    -new: 表示新生成一个证书请求
    -x509: 直接输出证书
    -key: 生成证书请求时用到的私钥文件
    -out:输出文件

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
    

    中间会要求输入地址,邮箱,公司等名字,由于是自颁发,随便输入即可。

    这个生成CA证书的命令会让人迷惑,因为生成证书其实一般需要经过三个步骤
    1.生成秘钥 xxx.pem
    2.通过秘钥 xxx.pem 生成证书请求文件 xxx.csr
    3.通过证书请求文件 xxx.csr 生成最终的证书 xxx.crt
    但是以下的命令将2和3杂糅在了一起

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
    

    其实等价于

    //生成证书请求文件
    openssl req -new -out /etc/pki/CA/req.csr -key /etc/pki/CA/private/cakey.pem
    // -in 使用证书请求文件生成证书,-signkey 指定私钥,这是一个还没搞懂的参数
    openssl x509 -req - in /etc/pki/CA/req.csr -out /etc/pki/CA/cacert.pem -signkey /etc/pki/CA/private/cakey.pem -days 3650
    

    4.生成服务端证书

    生成服务端私钥

    首先我创建并进入了~/https目录,然后生成服务端的私钥

    openssl genrsa -out https.pem 4096
    

    生成服务端证书请求

    openssl req -new -key https.pem -out https.csr -days 365 -subj "/C=CN/ST=asdf/L=asdf/O=asdf/CN=domainName.com/emailAddress=xxx@foxmail.com"
    

    这里使用-subj 可以预先完成证书请求者信息的填写,但要注意,填入的信息中C和ST和L和O一定要与签署的根证书一样,如果忘记了根证书乱填了什么,可以通过如下指令进行查询

    openssl x509 -in 根证书的路径+名字 -noout -subject
    

    生成服务端证书

    执行以下命令之后就能得到证书文件https.cert,这就是用于发送给客户端的证书

    openssl ca -in https.csr -out https.crt -days 365
    

    nginx的配置

    由于https默认采用443端口,所以此处配置443端口

    下载安装配置nginx

    wget http://nginx.org/download/nginx-1.11.3.tar.gz 
    tar -zfxv nginx-1.11.3.tar,gzpeizhi
    cd nginx-1.11.3
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    make install
    

    进入到配置文件nginx.conf,主要是修改ssl_certificate 和ssl_certificat_key,这两个就分别放证书和私钥就好了

    使用配置文件启动nginx后

    sudo /usr/sbin/nginx -c /home/woder/download/nginx-1.13.6/conf/nginx.conf 
    

    最后在浏览器中使用https访问 localhost,会提示不安全,是因为没有信任根证书,但说明已经收到了根证书,点击继续浏览,可以看到nginx的欢迎页;也可以把根证书通过chrome加以安装信任

    其它

    除了服务端证书和CA根证书之外,还有一种类型叫做客户端证书,这个的作用是用来验证客户的身份,在极少数的情况下会用到,比如说网银限制客户在某台机器上进行登陆,很久之前银行提供的u盾的作用就是为了提供客户端证书而存在的。总之,证书的作用就是用来验证身份。

    参考

    使用 openssl 生成证书(含openssl详解):https://blog.csdn.net/gengxiaoming7/article/details/78505107
    理解服务器证书CA&& SSL: https://blog.csdn.net/weixin_41830501/article/details/81128968
    使用openssl生成证书(详细): https://blog.csdn.net/gengxiaoming7/article/details/78505107
    证书的签发和通信过程: https://www.cnblogs.com/handsomeBoys/p/6556336.html
    自签名根证书和客户端证书的制作: https://blog.csdn.net/ilytl/article/details/52450334
    openssl指令说明: https://www.cnblogs.com/gordon0918/p/5409286.html

  • 相关阅读:
    C#:类的学习
    SilverLight xaml页面跳转方法
    C#对象生命周期(转载)
    jquery常用的方法
    关于Java日期简单应用
    Compilingphpwithcrypt()
    SSI使用详解
    实例解析:从IIS的ASP迁移到APACHE的PHP
    三步搞定phpwind的静态化部署
    Informix Dynamic Server 中的分布式事务
  • 原文地址:https://www.cnblogs.com/ishen/p/12216681.html
Copyright © 2020-2023  润新知