阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

公钥基础设施(PKI)/CFSSL证书生成工具的使用

448次阅读
没有评论

共计 4304 个字符,预计需要花费 11 分钟才能阅读完成。

公钥基础设施 (PKI)

基础概念

CA(Certification Authority) 证书,指的是权威机构给我们颁发的证书。

密钥就是用来加解密用的文件或者字符串。密钥在非对称加密的领域里,指的是私钥和公钥,他们总是成对出现,其主要作用是加密和解密。常用的加密强度是 2048bit。

RSA 即非对称加密算法。非对称加密有两个不一样的密码,一个叫私钥,另一个叫公钥,用其中一个加密的数据只能用另一个密码解开,用自己的都解不了,也就是说用公钥加密的数据只能由私钥解开。

证书的编码格式

PEM(Privacy Enhanced Mail),通常用于数字证书认证机构(Certificate Authorities,CA),扩展名为.pem, .crt, .cer, 和 .key。内容为 Base64 编码的 ASCII 码文件,有类似 ”—–BEGIN CERTIFICATE—–” 和 “—–END CERTIFICATE—–“ 的头尾标记。服务器认证证书,中级认证证书和私钥都可以储存为 PEM 格式(认证证书其实就是公钥)。Apache 和 nginx 等类似的服务器使用 PEM 格式证书。

DER(Distinguished Encoding Rules),与 PEM 不同之处在于其使用二进制而不是 Base64 编码的 ASCII。扩展名为.der,但也经常使用.cer 用作扩展名,所有类型的认证证书和私钥都可以存储为 DER 格式。Java 使其典型使用平台。

证书签名请求 CSR

CSR(Certificate Signing Request),它是向 CA 机构申请数字×××书时使用的请求文件。在生成请求文件前,我们需要准备一对对称密钥。私钥信息自己保存,请求中会附上公钥信息以及国家,城市,域名,Email 等信息,CSR 中还会附上签名信息。当我们准备好 CSR 文件后就可以提交给 CA 机构,等待他们给我们签名,签好名后我们会收到 crt 文件,即证书。

注意:CSR 并不是证书。而是向权威证书颁发机构获得签名证书的申请。

把 CSR 交给权威证书颁发机构, 权威证书颁发机构对此进行签名, 完成。保留好 CSR, 当权威证书颁发机构颁发的证书过期的时候, 你还可以用同样的 CSR 来申请新的证书,key 保持不变.

数字签名

数字签名就是 ” 非对称加密 + 摘要算法 ”,其目的不是为了加密,而是用来防止他人篡改数据。

其核心思想是:比如 A 要给 B 发送数据,A 先用摘要算法得到数据的指纹,然后用 A 的私钥加密指纹,加密后的指纹就是 A 的签名,B 收到数据和 A 的签名后,也用同样的摘要算法计算指纹,然后用 A 公开的公钥解密签名,比较两个指纹,如果相同,说明数据没有被篡改,确实是 A 发过来的数据。假设 C 想改 A 发给 B 的数据来欺骗 B,因为篡改数据后指纹会变,要想跟 A 的签名里面的指纹一致,就得改签名,但由于没有 A 的私钥,所以改不了,如果 C 用自己的私钥生成一个新的签名,B 收到数据后用 A 的公钥根本就解不开。

常用的摘要算法有 MD5、SHA1、SHA256。

使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。

数字证书和公钥

数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用 CA 的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。实际上,数字证书就是经过 CA 认证过的公钥,除了公钥,还有其他的信息,比如 Email,国家,城市,域名等。

CFSSL 工具

CFSSL 介绍

项目地址:https://github.com/cloudflare/cfssl

下载地址:https://pkg.cfssl.org/

参考链接:https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/

CFSSL 是 CloudFlare 开源的一款 PKI/TLS 工具。CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑 TLS 证书的 HTTP API 服务。使用 Go 语言编写。

CFSSL 包括:

  • 一组用于生成自定义 TLS PKI 的工具
  • cfssl 程序,是 CFSSL 的命令行工具
  • multirootca 程序是可以使用多个签名密钥的证书颁发机构服务器
  • mkbundle 程序用于构建证书池
  • cfssljson 程序,从 cfssl 和 multirootca 程序获取 JSON 输出,并将证书,密钥,CSR 和 bundle 写入磁盘

PKI 借助数字证书和公钥加密技术提供可信任的网络身份。通常,证书就是一个包含如下身份信息的文件:

  • 证书所有组织的信息
  • 公钥
  • 证书颁发组织的信息
  • 证书颁发组织授予的权限,如证书有效期、适用的主机名、用途等
  • 使用证书颁发组织私钥创建的数字签名

安装 cfssl

这里我们只用到 cfssl 工具和 cfssljson 工具:

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

cfssl 工具,子命令介绍:

bundle: 创建包含客户端证书的证书包

genkey: 生成一个 key(私钥) 和 CSR(证书签名请求)

scan: 扫描主机问题

revoke: 吊销证书

certinfo: 输出给定证书的证书信息,跟 cfssl-certinfo 工具作用一样

gencrl: 生成新的证书吊销列表

selfsign: 生成一个新的自签名密钥和 签名证书

print-defaults: 打印默认配置,这个默认配置可以用作模板

serve: 启动一个 HTTP API 服务

gencert: 生成新的 key(密钥) 和签名证书

◾-ca:指明 ca 的证书

◾-ca-key:指明 ca 的私钥文件

◾-config:指明请求证书的 json 文件

◾-profile:与 -config 中的 profile 对应,是指根据 config 中的 profile 段来生成证书的相关信息

ocspdump

ocspsign

info: 获取有关远程签名者的信息

sign: 签名一个客户端证书,通过给定的 CA 和 CA 密钥,和主机名

ocsprefresh

ocspserve

创建认证中心 (CA)

CFSSL 可以创建一个获取和操作证书的内部认证中心。

运行认证中心需要一个 CA 证书和相应的 CA 私钥。任何知道私钥的人都可以充当 CA 颁发证书。因此,私钥的保护至关重要。

生成 CA 证书和私钥 (root 证书和私钥)

创建一个文件 ca-csr.json:

{
  “CN”: “www.linuxidc.com”,
  “key”: {
    “algo”: “rsa”,
    “size”: 2048
  },
  “names”: [
    {
      “C”: “CN”,
      “ST”: “BeiJing”,
      “L”: “BeiJing”,
      “O”: “linuxidc”,
      “OU”: “ops”
    }
  ]
}

术语介绍:

CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法

C: Country,国家

L: Locality,地区,城市

O: Organization Name,组织名称,公司名称

OU: Organization Unit Name,组织单位名称,公司部门

ST: State,州,省

生成 CA 证书和 CA 私钥和 CSR(证书签名请求):

# cfssl gencert -initca ca-csr.json | cfssljson -bare ca  ## 初始化 ca
# ls ca*
ca.csr  ca-csr.json  ca-key.pem  ca.pem

该命令会生成运行 CA 所必需的文件 ca-key.pem(私钥)和 ca.pem(证书),还会生成 ca.csr(证书签名请求),用于交叉签名或重新签名。

小提示:

使用现有的 CA 私钥,重新生成:

cfssl gencert -initca -ca-key key.pem ca-csr.json | cfssljson -bare ca

使用现有的 CA 私钥和 CA 证书,重新生成:

cfssl gencert -renewca -ca cert.pem -ca-key key.pem

查看 cert(证书信息):

# cfssl certinfo -cert ca.pem

查看 CSR(证书签名请求) 信息:

# cfssl certinfo -csr ca.csr

配置证书生成策略

配置证书生成策略,让 CA 软件知道颁发什么样的证书。

# vim ca-config.json
{
  “signing”: {
    “default”: {
      “expiry”: “8760h”
    },
    “profiles”: {
      “etcd”: {
        “usages”: [
            “signing”,
            “key encipherment”,
            “server auth”,
            “client auth”
        ],
        “expiry”: “8760h”
      }
    }
  }
}

这个策略,有一个默认的配置,和一个 profile,可以设置多个 profile,这里的 profile 是 etcd。

默认策略,指定了证书的有效期是一年 (8760h)

etcd 策略,指定了证书的用途

signing, 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE

server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证

client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证

cfssl 常用命令:

cfssl gencert -initca ca-csr.json | cfssljson -bare ca ## 初始化 ca

cfssl gencert -initca -ca-key key.pem ca-csr.json | cfssljson -bare ca ## 使用现有私钥, 重新生成

cfssl certinfo -cert ca.pem

cfssl certinfo -csr ca.csr

正文完
星哥玩云-微信公众号
post-qrcode
 1
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4304字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7987882
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...