• openssl自签名证书


    证书的作用

    1.加密通信数据
    2.验证对象身份
    3.保证数据完整性

    自签名证书是什么

    公认的证书往往都要收费,如果客户端与服务端都由自己来操控,便可以使用自签名证书(只是自己认可的证书)

    CA签名证书

    就是把我们自己当成认证机构去认证一个证书,客户端信任该CA证书也代表信任该CA证书签名的所有自签名证书

    自签名证书应用场景

    1.用于测试环境中需要使用证书时
    2.用于构建根CA

    自签名证书分为

    1.自签名私有证书(无法被吊销)
    2.自签名CA证书(可以被吊销)

    两种自签名证书的区别在于

    如果私钥不小心被恶意获取,私有证书不能被吊销,那么黑客有可能伪装成受信任的客户端与用户进行通信
    如果需要创建多个客户端证书,使用自建签名证书的方法比较合适,只要给所有客户端都安装了CA根证书,那么以该CA根证书签名过的客户端证书都是信任的,不需要重复的安装客户端证书。

    不过因为是自建的CA证书,在使用这个临时证书的时候,会在客户端浏览器报一个错误,签名证书授权未知或不受信任(signing certificate authority is unknown and not trusted),但只要配置正确,继续操作并不会影响正常通信。自签名证书的issuer和subject是一样的

    openssl是什么

    是一套开源的密码学工具包
    在SSL协议中,我们使用了很多密码学手段来保护数据,其中包括对称密码,公钥密码,数字签名,证书,完整性校验,伪随机数生成等。由于这些算法和操作都非常复杂,于是开源社区就开发了一套库,这个库里面提供了很多现成的标准方法,其他开发者只要正确的调用这些方法,就可以实现SSL协议中的各种加密/解密操作了。

    使用openssl的私钥产生公钥之前,需要了解以下几点:
    1.key算法:openssl支持生成RSA,DSA,ECDSA的密钥对,但RSA是目前使用最普遍的。
    2.key长度:RSA的2048是公认比较安全的key长度。
    3.密码(Passphrase):在key上使用密码是一个可选值,但是一般都是强烈建议的,这样每次使用key文件时,都需要输入密码才能使用,增强了其安全性,但随之而来的易用性也会变差。

    下面分别阐述如何使用openssl生成这两种自签名证书:

    生成CA证书

    1.生成CA证书的私钥key(ca.key)。以下输入了为这个key值设置了密码,且密码使用aes128加密保存:

    openssl genrsa -aes128 -out ca.key 2048
    
    Generating RSA private key, 2048 bit long modulus
    ............+++
    ................................................................+++
    e is 65537 (0x10001)
    Enter pass phrase for ca.key:****************
    Verifying - Enter pass phrase for ca.key:****************
    

    这个key文件就是私钥文件,可以查看文件内容:

    cat ca.key 
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,3AA345A5EAEEC76EA555F5A31BBFA8EE
    
    k1L969cTWsZpHRPHcXBGlA29frVQmavNLOBA9Dpd7I0h3wShhPQBEMM0jlmhGjyH
    5toPblm1OmSxQfWwpLVXg6beawUHo47lis+o1tHk0Xw857dFuVF6zVFY8NljEWm0
    Egev5pBGjlB6i4jnaBS/T7V19sklAqHc8Eb9oT9rhSc5vlBSosKzG+GFFQL4jQV7
    0Yv+6KWO4ILZPCZi2llQ3vTO9TKF5ZjjNS506qqilwJQblIgju/wzr3k6Eca1XXZ
    bPSVNl0tFpXR/ZwM8S3UabRZG45BPxQ9yqb4dKSJ87HZIm8SO0Y6uuioCiT55zIv
    sfU4trvrieCTGbHArYT8WlhAU9x1L7FD9lKy2HQksDC9wlAaCB3QvOExs7r1EEFS
    /0zcD+ZGbrhGrXIXeNfrqUzQbEwMEhQ9/RYJYDEEw0ix0KUyXE76jTnx4dHb1s+l
    21O9C2MoFlNLxnGYdnZGAYyt9enIGyfFfLeowuGpXyFENEcBe7gCyWwM8KgOtvsW
    0AB/cFJpsDXsFxqAsXXc0T9lg4GjbNEJ77mXgn9lM7c8eNjLZ8fFHSl32iDHr4Y7
    04Z9ybwXeO3fTg68GKmqkcwOfy8F2cYULcDb2litVVj9HZEW9ytwheU4MwA9NFfl
    zlXBq7E8T0xcLQ6P/6AJ0c1opX0KKLBc6H8jHd3vPtHQ2F+7BiyIAK5aS8WV+d7a
    S5Rr6aw6d2qOUHCPcWNIdOuoF/jqTzhHuPah68lT7AWJrLG0r7rbT2FpjpPBRxFg
    Dbh8piV6akY15yjnR436MosFR3YG4z0oBfJj8tX3Q7x0uU1jJhgv+bK9/lVTQttk
    jqPI+VlDHSpSVmVKss1saBYy2KA9/1af6BbaKwzvDwxABpIQt7ggZvo+m3qjV++r
    Q8jp9RExQ0Wb2WEDhYzJcBVBKzLHUYVexs/8jppLy46xnWMCrmupoWTlidaaWH6q
    yiviIuG9rtufJ46IGJCm6iysq652x6H8v8y1gNarez97TvaX4YcnhLWS8ekop5Mu
    4SmRdl84K/YtYa93JHVcnQvATUtlUFJoTx+2GJiDAeqsXu023EzTxmSRMAx5wb4G
    9aseIe3QSEfH9ofJQv7qKk4iBJVRsGpruhp57cIdmwFcgncKubpWif95PPmYvcAM
    SB+/4kWv44v4gEdeK75F32aEKRoJWWi3rUl8vVnEq+w9BTctM+dWdbtvt7Ztx4SE
    ZjbZDUs7pzZy5/U8COZu8E98J5oQAm3TuXhXmvk3chDUAAfAL9z0GdzPBeFYku4X
    691JzCgvcMs+URXB0mY6+JW8zyet7VNqqYAEhCmQu4myK1vtOZK0W7WFNsS1RoJF
    7pYbPmHMaHtPfW8QuaWnIX+6Y5ikzPs7UURbRA6OFO9JuZjvioAtyamT+3ddWipN
    9e6kzK+MtCyfMm1m1rdtwVjJR7PNNxxxxx
    -----END RSA PRIVATE KEY-----
    

    2.生成公钥

    使用命令:
    openssl rsa -in ca.key -pubout -out ca-public.key
    Enter pass phrase for ca.key:****************
    writing RSA key
    

    查看这个key文件,就是公钥:

    cat ca-public.key 
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzOofgh69ioDeB9fGVMQd
    /sCgfD1xcrRaf6l6ttrIRvtie/ImJEhP3r2KmDEfIKormpUget8tsAxE7uesgaDi
    NQzn63YnOz6jiIN9a7as08kL1GyCexF0KFj27hMDcbNDIMZA+i+tLruuExnAdj4f
    48T5kA6wiEWXVgPONbHixDrOkcSKQQq1KfV0raFxMX/PyY+kKgnUR7azBOl8X719
    HZwcdpOcg6+qbIHpOYWAGePTNlX4jPEU4eNLhCd+n+pT2OCQnrMEslLFoeoYgCvm
    RSnv/xxxxxx
    -----END PUBLIC KEY-----
    

    3.生成CA的自签名证书ca.crt,此处的CA证书也是一个自签名证书

    openssl req -new -x509 -days 365 -key ca.key -out ca.crt
    # 输入上面ca.key的密码后,根据自身测试环境的情况输入相应的信息,在Common Name选项中填写你要使用的域名
    Enter pass phrase for ca.key:****************
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:
    Locality Name (eg, city) [Default City]:
    Organization Name (eg, company) [Default Company Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) []:devops03.com
    Email Address []:
    

    以下命令可以不用在调用密钥文件的时候输入密码:

    openssl rsa -in ca.key -out ca.key 
    Enter pass phrase for ca.key:****************
    writing RSA key
    

    查看自签名证书信息(颁发者):

    openssl x509 -in ca.crt -subject -issuer -noout
    
    subject= /C=CN/L=Default City/O=Default Company Ltd/CN=devops03.com
    issuer= /C=CN/L=Default City/O=Default Company Ltd/CN=devops03.com
    
    使用CA证书签名自签名证书

    步骤:也就是获取权威机构办法的证书(此处为我们刚才生成的CA证书),需要先得到私钥的key文件(.key),然后使用私钥的key文件生成sign req文件(.csr文件),最后把csr文件发给权威机构,等待权威机构认证,认证成功后,会返回证书文件(.crt)。

    1.生成自签名证书私钥key(server.key)文件

    openssl genrsa -aes128 -out server.key 2048 
    
    Generating RSA private key, 2048 bit long modulus
    ...................+++
    .........................................+++
    e is 65537 (0x10001)
    Enter pass phrase for server.key:****************
    Verifying - Enter pass phrase for server.key:****************
    

    2.利用私钥server.key文件生成自签名证书请求文件server.csr
    生成csr文件时,需要填写一些关于待签人或者公司的一些信息,比如国家明,省份名,组织机构名,主机名,email名,有些信息可以不填写,使用.标识。

    openssl req -new -key server.key -out server.csr
    Enter pass phrase for server.key:
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:
    Locality Name (eg, city) [Default City]:
    Organization Name (eg, company) [Default Company Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) []:devops03.com
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:****************
    An optional company name []:
    

    输入相应的信息后可以得到server.csr请求文件

    3.使用CA证书对自签名证书请求文件进行签名,生成server.crt

    openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
    Signature ok
    subject=/C=CN/L=Default City/O=Default Company Ltd/CN=devops03.com
    Getting CA Private Key
    

    查看自签名证书的过期时间:

    openssl x509 -in server.crt -subject -issuer -noout
    

    openssl生成root CA及签发证书

    有时,使用SSL协议是自己内部服务器使用的,这时可以不必找第三方权威的CA机构做证书,可以做自签证书(自己创建root CA(非权威)。
    主要有以下三个步骤:
    A.创建openssl.cnf在使用default-ca时需要使用的SSL的工作目录(第一次必须要设置)
    1.查看openssl的配置文件

    openssl version -a
    OpenSSL 1.0.2k-fips  26 Jan 2017
    built on: reproducible build, date unspecified
    platform: linux-x86_64
    options:  bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
    compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
    OPENSSLDIR: "/etc/pki/tls"
    engines:  rdrand dynamic 
    

    2.找到OPENSSLDIR: "/etc/pki/tls"的配置文件openssl.cnf
    根据配置文件下的[ CA_default ]节点默认值,创建对应文件夹和文件。

    [ CA_default ]
    
    dir             = /etc/pki/CA           # Where everything is kept
    certs           = $dir/certs            # Where the issued certs are kept
    crl_dir         = $dir/crl              # Where the issued crl are kept
    database        = $dir/index.txt        # database index file.
    #unique_subject = no                    # Set to 'no' to allow creation of
                                            # several ctificates with same subject.
    new_certs_dir   = $dir/newcerts         # default place for new certs.
    
    certificate     = $dir/cacert.pem       # The CA certificate
    serial          = $dir/serial           # The current serial number
    crlnumber       = $dir/crlnumber        # the current crl number
                                            # must be commented out to leave a V1 CRL
    crl             = $dir/crl.pem          # The current CRL
    private_key     = $dir/private/cakey.pem# The private key
    RANDFILE        = $dir/private/.rand    # private random number file
    

    按顺序在/etc/pki/CA下执行以下命令创建文件夹和文件:

    mkdir certs(默认应该是存在的)存放已颁发的证书
    mkdir newcerts(默认应该是存在的)存放CA指令生成的新证书
    mkdir private(默认应该是存在的)存放私钥
    mkdir crl(默认应该是存在的)存放已吊销的证书
    touch index.txt  openssl定义的已签发证书的文本数据库文件,这个文件通常在初始化的时候是空的
    echo 01>serial   证书签发时使用的序列号参考文件,该文件的序列号是以16进制格式进行存放的,该文件必须提供并包含一个有效序列号
    

    执行完成后,当前目录为:

    [root@prometheus01 /etc/pki/CA]# ll
    total 4
    drwxr-xr-x. 2 root root 6 Jan 18 21:56 certs
    drwxr-xr-x. 2 root root 6 Jan 18 21:56 crl
    -rw-r--r--  1 root root 0 Mar 28 16:45 index.txt
    drwxr-xr-x. 2 root root 6 Jan 18 21:56 newcerts
    drwx------. 2 root root 6 Jan 18 21:56 private
    -rw-r--r--  1 root root 1 Mar 28 16:45 serial
    

    B:生成CA根证书(root ca证书)
    步骤:生成CA私钥(.key) --> 生成CA证书请求(.csr) --> 自签名得到根证书(.crt)(CA给自己颁发的证书)。

    1.生成私钥ca.key
    openssl genrsa -out ca.key 2048
    
    2.生成csr请求文件
    openssl req -new -key ca.key -out ca.csr
    
    3.生成ca根证书 ca.crt
    openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
    

    C.用自签根证书ca.crt给用户证书签名。
    步骤:生成私钥(.key) --> 生成证书请求(.csr) --> 用CA根证书签名得到证书(.crt)

    1.openssl genrsa -out server.key 1024
    2.openssl req -new -key server.key -out server.csr
    3.openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 
    

    D.证书的简单使用
    把server.crt以及server.key保存在服务器端等待程序加载使用。
    把ca.key保存在客户端,如果客户端需要验证服务器端发的证书时使用。

    nginx官方文档中有关自签名证书的生成步骤:

    Generate Certificates
    To generate dummy certficates you can do this steps:

    cd /usr/local/nginx/conf
    openssl genrsa -des3 -out server.key 1024
    openssl req -new -key server.key -out server.csr
    cp server.key server.key.org
    openssl rsa -in server.key.org -out server.key
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    

    Configure the new certificate into nginx.conf:

    server {
    
        server_name YOUR_DOMAINNAME_HERE;
        listen 443;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/server.crt;
        ssl_certificate_key /usr/local/nginx/conf/server.key;
    
    }
    

    Restart Nginx.

    Now all ready to access using:

    https://YOUR_DOMAINNAME_HERE
    

    RSA是非对称加密,需要用两个密钥来加密和解密,这两个密钥是公钥和私钥

  • 相关阅读:
    linux下区分各种SCSI磁盘类型
    Linux那些事儿之我是SCSI硬盘(3)磁盘磁盘你动起来!
    待机(STR)suspend device flow
    %pf
    ftrace misc
    reboot系统调用的时候会调用shutdown函数
    Linux进程调度
    一张图让你读懂Linux内核运行原理
    linux O1 and CFS process sched
    SQL 视图 触发器 等
  • 原文地址:https://www.cnblogs.com/even160941/p/16068449.html
Copyright © 2020-2023  润新知