LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

使用免费开源工具cfssl签名生成tls证书

admin
2025年8月24日 16:16 本文热度 24

cfssl 是 CloudFlare 使用golang开发的 pki/tls 瑞士军刀级开源工具。它既是一个命令行工具,也是一个用于签名、验证和捆绑 tls 证书的 http api 服务器。我们可以使用它方便快捷地生成tls通信所需要的私钥和证书。本文重点介绍使用cfssl和cfssl http api服务器生成证书的详细过程。



工具安装

cfssl官方仓库地址:

https://github.com/cloudflare/cfssl

可以在此下载到最新的源码,或者直接下载官方编译好的二进制文件,当前最新的版本为v1.6.5。

cfssl项目包含一系列工具:

$ tree bin
bin
├── cfssl
├── cfssl-bundle
├── cfssl-certinfo
├── cfssl-newkey
├── cfssl-scan
├── cfssljson
├── mkbundle
└── multirootca

0 directories, 8 files


其中最常用的有以下这几个:

cfssl: 用于签发证书的标准命令行工具

cfssljson: 将cfssl生成的证书转变为文件

cfssl-certinfo: 验证和查看证书信息


cfssl 工具通过下面的命令指定需要执行的操作:

   sign             签署证书
   bundle           构建证书包
   genkey           生成私钥和证书请求
   gencert          生成私钥和证书
   serve            启动HTTP API服务器
   version          打印当前版本
   selfsign         生成自签名证书
   print-defaults   打印默认配置


生成证书

生成tls证书首先需要生成CA证书,CA证书分为根CA证书和中间CA证书,根CA证书通常用于签署其它中间证书,而中间证书则可以用于签署服务器所使用的TLS证书。当然,根证书也可以用来签名生成服务器证书,这里我们直接使用根证书进行签名。

在生成证书之前,需要创建一个证书请求配置文件,先来创建一个根证书的配置文件:ca-csr.json


{  "CN": "My Root CA",  "key": {    "algo": "rsa",    "size": 4096  },  "names": [    {      "C": "CN",      "ST": "Beijing",      "L": "Beijing",      "O": "example Inc",      "OU": "IT"    }  ],  "ca": {    "expiry": "87600h"  }}

在这个配置文件中,各项键值的含义如下:

CN(Common Name,通用名称)需要根据生成的证书类型来确定。对于服务器证书,一般填写该服务器的域名,对于CA证书,一般使用一个标识名称,例如 My Root CA,用以标识证书的颁发机构。

key则包含加密算法(algo)和密钥长度(size),一般使用rsa算法,在安全性要求比较高的场景,密钥长度可以设置为4096位。

names,包含多个字段,C指国家代号,ST指省份名称,L指城市或地区名称,O指组织或单位名称,OU指部门名称。

ca中的expiry指定CA证书的有效期,对于CA证书一般可以设置10年(87600小时))。

另外需要注意的是,由于json不支持注释,因此不能在这个配置文件中添加任何注释内容。

编辑好配置文件内容后,就可以使用如下的命令生成根CA证书了。命令最后的ca表示生成的文件将以此作为名称前缀。

cfssl gencert -initca ca-crs.json | cfssljson -bare ca
在生成服务器证书之前,可以为cfssl工具创建一个全局配置文件ca-config.json,通过它来定义不同使用场景的证书有效期,用途等。
{  "signing": {    "default": {      "expiry": "87600h"    },    "profiles": {      "server": {        "expiry": "8760h",        "usages": ["signing", "key encipherment", "server auth"]      },      "client": {        "expiry": "8760h",        "usages": ["signing", "key encipherment", "client auth"]      },      "peer": {        "expiry": "8760h",        "usages": ["signing", "key encipherment", "server auth", "client auth"]      },      "ca": {        "expiry": "87600h",        "usages": ["signing", "key encipherment", "server auth", "client auth"]      }    }  }}
接下来,再创建一个服务器证书请求配置文件server.json,就可以生成服务器证书了。
{  "CN": "*.example.com",  "key": {    "algo": "rsa",    "size": 2048  },  "hosts": [    "*.example.com",    "localhost",    "127.0.0.1"  ] } 
需要注意的是,在服务器证书请求配置文件中,hosts列表中的值需要填写服务器的域名、泛域名,主机名和回环地址等,只有通过hosts中包含的域名、主机名或IP地址等方式访问该服务时才可通过认证。
现在所有准备工作都已完成,可以使用CA证书来签名生成服务器证书了:
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server-csr.json | cfssljson -bare server
我们可以使用cfssl-certinfo工具来查看生成的证书信息.
cfssl-certinfo -cert server.pem 


通过API服务器生成证书

除了通过命令行工具生成tls证书,cfssl工具还支持启动一个http服务,通过API请求生成tls证书。

想要启动一个安全性高的API服务器,当然需要启用tls,相关的证书可以通过cfssl命令行生成,然后使用下面的命令启动:

cfssl serve -address 192.168.100.110 -port 8888 -ca ca.pem -ca-key ca-key.pem -tls-cert cfssl-server.pem -tls-key cfssl-server-key.pem -config ca-config.json

准备好证书请求配置文件后,就可以通过curl访问API服务器生成证书和私钥了。下面是一个生成CA证书和私钥的案例:

cat ca-csr.json | curl --cacert /opt/cfssl/cert/ca.pem  -s -w "\n" -X POST -H "Content-Type: application/json" -d @- https://192.168.100.110:8888/api/v1/cfssl/init_ca | jq .result | cfssljson -bare ca

生成的证书文件会保存在执行命令的当前目录。


- END-


阅读原文:原文链接


该文章在 2025/8/25 13:19:19 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved