使用cfssl配置nginx https

本文详细解读HTTPS中的根证书概念,演示如何使用cfssl生成CA和签发证书,包括配置文件的创建与ca.pem、www.pem的生成。同时介绍了如何在Nginx中配置SSL。关键词涉及CA根证书、数字证书、SSL、Nginx配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTPS相关概念

CA根证书

根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。
CA证书有两个作用:

  • 签发数字证书(用户找CA签发)
  • 校验数字证书(客户找CA校验收到的证书是否合法有效)

在SSL通信握手过程中,需要将公钥数字证书交给对方,对方如何对数字证书进行校验?就是要在找到签发此证书的CA证书及证书链,一直找到CA根证书。

server-key.pem

  • 服务端生成的私钥文件

  • 可以解密客户端发送加密数据(https握手过程交换秘钥)

server.csr

  • csr文件为证书请求文件

  • 包含企业等信息,非对称加密等选项

server.pem

  • 证书文件

  • 使用server.csr通过CA证书签名(sha256,md5)过的证书文件

开始

1. github下载cfssl

这里需要2个bin文件
分别下载相应的版本
cfssl
cfssljson

2. 生成配置文件

生成根证书配置

cfssl print-defaults csr > json/ca-csr.json
内容如下

{
    "CN": "example.net",
    "hosts": [
        "example.net",
        "www.example.net"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "ST": "CA",
            "L": "San Francisco"
        }
    ]
}

一般的数字证书产品的主题通常含有如下字段:

CN

CN: 公用名称 (Common Name) 简称,

  • 对于 SSL 证书,一般为网站域名或IP地址;
  • 而对于代码签名证书则为申请单位名称;
  • 而对于客户端证书则为证书申请者的姓名;
hosts

hosts可以指定多个(泛)域名以及多个IP地址

key

指定了加密算法,一般使用rsa(size:2048)

names 字段

单位名称 (Organization Name) :简称:O 字段

  • 对于 SSL 证书,一般为网站域名;
  • 而对于代码签名证书则为申请单位名称;
  • 而对于客户端单位证书则为证书申请者所在单位名称;
证书申请单位所在地:
  • 所在城市 (Locality) 简称:L 字段

  • 所在省份 (State/Provice) 简称:S 字段

  • 所在国家 (Country) 简称:C 字段,只能是国家字母缩写,如中国:CN

其他一些字段:
  • 电子邮件 (Email) 简称:E 字段

  • 多个姓名字段 简称:G 字段

  • 介绍:Description 字段

  • 电话号码:Phone 字段,格式要求 + 国家区号 城市区号 电话号码,如: +86 732 88888888

  • 地址:STREET 字段

  • 邮政编码:PostalCode 字段

  • 显示其他内容 简称:OU 字段

生成证书文件

cfssl gencert -initca json/ca-csr.json | cfssljson -bare ca
执行后生成几个文件
生成的文件中有下面三个后面会用到:

  • ca-key.pem: CA 证书密钥
  • ca.pem: CA 证书
  • ca.csr
生成签发配置文件(用 CA 证书来签发其它证书时需要用)

cfssl print-defaults config > json/ca-config.json
内容如下

{
    "signing": {
        "default": {
            "expiry": "168h"
        },
        "profiles": {
            "www": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            }
        }
    }
}
  • signing:签署配置
  • default:默认的配置
    • expiry 过期时间
  • default.expiry:默认签署其他证书过期时间
  • profiles:配置文件,可以配置多个不同的证书配置
    • www:定义的一个profile,可以使用命令生成这个的证书
  • usages 用途
准备数据

复制 json/ca-csr.json 到json/www-csr.json,修改内容

{
    "CN": "test.xxx.com",
    "hosts": [
        "*.test.xxx.com",
        "test.xxx.com"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "CN",
            "ST": "BJ",
            "L": "BJ xxx"
        }
    ]
}


为网站签发证书

cfssl gencert \
  -ca=ca.pem \
  -ca-key=ca-key.pem \
  -config=json/ca-config.json \
  -profile=www \
  json/www-csr.json | cfssljson -bare www

会生成下面两个重要的文件:

  • www-key.pem: www 密钥。
  • www.pem: www 证书。

配置nginx

ssl_certificate /xxx/keys/www.pem;
ssl_certificate_key /xxx/keys/www-key.pem;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值