使用OpenSSL自签证书

  • Post author:
  • Post category:其他




目录



一. 名词解释



1. CA机构

电子商务认证中心、电子商务认证授权机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

CA是负责签发证书、认证证书、管理已颁发证书的机关。



2. SSL 证书(SSL Certificates)

即安全套接层(SSL)数字证书,数字证书是一种用于电脑的身份识别机制。数字证书可以从身份认证机构获得。理论上任何人都可以给您发个数字证书。换个说法就是给您发数字证书的那个人或机构对您的公钥进行加签。一般国际可信的证书由CA机构制作颁发,据各种不同情况,可能是CA给用户颁发的,或者用户主动申请的。



3. HTTPS(超文本传输安全协议)

一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。



4. 单向认证

只需要验证SSL服务器身份,不需要验证SSL客户端身份。



5. 双向认证

要求服务器和客户端双方都有证书,客户端需要校验服务端,服务端也需要校验客户端。



二. 获取证书途径

  1. 向CA认证商购买
  2. 使用OpenSSL自签证书



三. 使用OpenSSL自签证书



前置准备

  1. 下载并安装OpenSSL,win端在此网站下载

    http://slproweb.com/products/Win32OpenSSL.html

    安装之后执行在命令行执行openssl version -a会输出相关信息

  2. 修改上一步执行命令后,OPENSSLDIR路径下的配置文件openssl.cnf

    将CA_default下的dir的值改为

    .

    ,其他不变

    配置文件路径

配置文件修改

  1. 新建一个文件夹,之后都是基于该文件夹下进行操作

  2. 在文件夹内新建以下内容

    certs     // 文件夹,保存导出证书
    config    // 文件夹,保存配置文件
    crl       // 文件夹,保存吊销列表
    csr       // 文件夹,保存请求文件
    newcerts  // 文件夹,保存证书
    private   // 文件夹,保存密钥
    crlnumber // 文本,下一个吊销列表序列号
    index.txt // 文本,保存签证信息
    serial    // 文本,下一个证书序列号
    
  3. 给crlnumber、serial写入文本

    01


  4. 以下均是在win系统上执行,若要在Linux上执行,请将执行步骤里的反斜杠

    \

    替换成正斜杠

    /



1. 生成CA证书

既然要自签证书,因此需要自己承担CA这个角色,首先需要生成CA证书



生成步骤

  1. 生成CA密钥

    openssl genrsa -out .\private\cakey.pem 4096

  2. 生成CA请求文件

    openssl req -new -sha256 -out .\csr\cakey.csr -key .\private\cakey.pem

  3. 生成CA证书

    openssl x509 -req -days 3650 -in .\csr\cakey.csr -signkey .\private\cakey.pem -out .\cacert.pem

  4. 导出安装用证书

    openssl pkcs12 -export -inkey .\private\cakey.pem -in .\cacert.pem -out .\certs\ca.pfx



注意事项

  1. 执行第二步时,会要求填入相关信息,内如如下

    Country Name (2 letter code) [AU]:CN // 国家
    State or Province Name (full name) [Some-State]:GuangDong // 省份
    Locality Name (eg, city) []:ShenZhen // 城市
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:YD-Cat // 机构
    Organizational Unit Name (eg, section) []:  // 单位,可选
    Common Name (e.g. server FQDN or YOUR name) []:YD-Cat  // 公用名,可选
    Email Address []:  // 可选
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request     
    A challenge password []:     // 可选
    An optional company name []: // 可选
    
  2. 第三步的 -days 3650 用来指定证书有效时间,若不指定则使用OpenSSL配置文件里的默认值



2. 生成服务端证书

生成步骤和CA证书类似,

但需要添加一个配置文件



配置文件

在config文件夹下新建一个server.conf文件,内容如下

[ req ]
req_extensions = req_ext

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = test.com   # 自行根据待配置证书的域名修改
DNS.2   = *.test.com # 自行根据待配置证书的域名修改,该项用来认证二级域名,若无需验证去掉即可



生成步骤

  1. 生成证书密钥

    openssl genrsa -out .\private\serverkey.pem 2048

  2. 生成证书请求文件

    openssl req -new -sha256 -out .\csr\serverkey.csr -key .\private\serverkey.pem

  3. 生成证书

    openssl ca -in .\csr\serverkey.csr -out .\certs\server.crt -days 3650 -extensions req_ext -extfile .\config\server.conf

    执行后输入两次 Y 并且回车即可



注意事项

  1. 执行第二步时,会要求填入相关信息,内容和CA证书一致


    但此时若不修改OpenSSL配置文件,服务端证书部分字段要求和CA证书的对应字段一致,或者必填,否则无法签名

    详情看配置文件openssl.cnf的

    [ policy_match ]

    项,根据需要修改对应的匹配规则即可

    # 匹配规则
    # match 完全一致
    # optional 可选
    # supplied 必填,可不一致
    [ policy_match ]
    countryName		    = match
    stateOrProvinceName	= match
    organizationName	= match
    organizationalUnitName	= optional
    commonName		= supplied
    emailAddress	= optional
    
  2. 根据server.conf中的[alt_names]项的

    DNS.1 = test.com

    来匹配认证域名,若不匹配打开网之后会提示证书不安全

    可使用 *.test.com 来通用匹配二级域名



3. 生成客户端证书

生成步骤和服务端类似,会多一个导出安装用证书的步骤

该步骤导出的文件用来在访问端电脑上安装



生成步骤

  1. 生成证书密钥

    openssl genrsa -out .\private\clientkey.pem 2048

  2. 生成证书请求文件

    openssl req -new -sha256 -out .\csr\client.csr -key .\private\clientkey.pem

  3. 生成证书

    openssl ca -in .\csr\client.csr -out .\certs\client.crt -days 3650

    执行后输入两次 Y 并且回车即可

  4. 导出安装用证书

    openssl pkcs12 -export -inkey .\private\clientkey.pem -in .\certs\client.crt -out .\certs\client.pfx



四. 配置证书

以Nginx为例,在Nginx的配置文件做以下修改



单向认证

  1. listen改为

    443 ssl

    ,server_name改为待配置证书的域名

    注:server_name需和生成服务端证书的server.conf里的[alt_names]一致

  2. 新增以下配置

ssl_certificate      D:\CA\certs\server.crt;      # 服务端证书,即生成服务端证书第三步生成的文件
ssl_certificate_key  D:\CA\private\serverkey.pem; # 服务端证书密钥,即生成服务端证书第一步生成的文件
  1. 在需要访问的电脑上安装certs文件夹下的CA证书,即生成CA证书的第四步生成的文件

    ca.pfx
    

    注意事项:

    1. 安装证书时选择安装位置,将证书安装在

      受信任的根证书颁发机构

      路径
    2. 若执行导出证书步骤时有填入密码,在安装证书时也要填写

安装CA证书

  1. 重新加载Nginx配置文件
  2. 打开HTTPS网址,若一切正常,会正常登录,并在浏览器地址栏旁边会出现锁的图标

锁



双向认证

  1. 在单向认证的基础上,Nginx新增以下配置
ssl_client_certificate D:\CA\cacert.pem;  # CA证书,即生成CA证书第三步所生成的文件
ssl_verify_client on;  # 开启客户端证书验证,即双向认证
  1. 在需要访问的电脑上安装certs文件夹下的客户端证书,即生成客户端证书的第四步生成的文件

    client.pfx
    

    注意事项:

    1. 安装时一直下一步即可
    2. 若最后打开网址无法选择证书,尝试像安装CA证书一样选择安装位置,安装到

      个人

      路径下
  2. 重新加载Nginx配置文件

  3. 打开HTTPS网址

    1. 若一切正常,会弹框提示选择证书
    2. 若有正常安装客户端证书,会有上一步所安装的客户端证书,以及相关信息
    3. 选择后可正常登陆,并在浏览器地址栏旁边会出现锁的图标

选择证书



五. 吊销列表

目前吊销列表只适用于吊销客户端证书,并且已开启双向认证,将客户端证书吊销后即可无法登录



吊销步骤

  1. 获取证书编号

    openssl x509 -in .\certs\证书名.crt -noout -serial


    证书名改为生成客户端证书第三步生成的证书名

    执行后,serial后为证书编号

  2. 吊销证书

    openssl ca -revoke .\newcerts\证书编号.pem


    将证书编号改为上一步所获取的证书编号

  3. 生成吊销列表文件,

    每一次吊销证书后都需要执行,否则无法更新其文件内容

    openssl ca -gencrl -out .\crl\crl.pem

  4. 查看吊销列表,用来查看已吊销的证书,

    可不执行

    openssl crl -in .\crl\crl.pem -noout -text



Nginx使用吊销列表

  1. 在双向认证的基础上,新增以下配置

    ssl_crl  D:\CA\crl\crl.pem;  # 吊销列表文件
    
  2. 重新加载Nginx配置文件

  3. 打开HTTPS网址,之后和双向认证登陆一致,只是选择被吊销的证书后无法正常登陆

证书被吊销



版权声明:本文为qq704200551原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。