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

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

weilovepan520关注1人评论84344人阅读2018-05-26 12:22:20

https://blog.51cto.com/liuzhengwei521/2120535

公钥基础设施(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程序,从cfsslmultirootca程序获取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.51yunv.com",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "51yunv",
      "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,这里的profileetcd

  • 默认策略,指定了证书的有效期是一年(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
  •  

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11352356.html

时间: 2024-10-12 06:18:59

[转帖]公钥基础设施(PKI)/CFSSL证书生成工具的使用的相关文章

mkcert本地 HTTPS 加密证书生成工具

软件介绍: mkcert 是一个生成本地 HTTPS 加密证书的工具,一个命令就可以生成证书,不需要任何配置. 下载地址: https://github.com/FiloSottile/mkcert/releases 原文地址:https://www.cnblogs.com/miaosj/p/10350080.html

java PKCS12 证书生成

引入依赖 <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.49</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <arti

X509 证书生成

X509证书介绍 X.509 是由国际电信联盟(ITU-T)制定的数字证书标准,相信这是人尽皆知的了,目前X.509证书据我所知有三个版本,.net中使用的是x.509-2,X.509-2 版引入了主体和签发人唯一标识符的概念,以解决主体和/或签发人名称在一段时间后可能重复使用的问题,x509-2(以下简称x509)证书由两把钥匙组成,通常称之为密钥对,公钥加密,私钥解密.今天我想在这里对x509进行一个深入的介绍和了解,因为在WCF的安全体系中,x509证书应用是非常频繁的,或者说是不可缺少的

加密解密技术基础以及公钥基础设施(PKI)

网络之间的通信通过传递报文的方式实现,在传递这些报文的过程中,为了保护报文内容不随意被窃取和修改,对报文进行加密就起到了至关重要的作用. 加密和解密:传统加密方法.现代加密方法. 传统加密算法:替换加密算法.置换加密算法. 现代加密方法:现代块加密方法. 加密和解密都依赖于算法的实现,但加密的安全性不能依赖于算法本身,因为算法是公开的,人人都可以知道.所以就需要通过另一种更安全的方式实现对数据报文的封装,这就需要密钥来实现. 密钥算法和协议:对称加密.公钥加密.单向加密.认证协议. 对称加密:加

PKI(公钥基础设施)基础知识笔记

数字签名 数字签名(又称公钥数字签名.电子签章)是一种类似写在纸上的普通的物理签名.可是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法. 一套数字签名通常定义两种互补的运算,一个用于签名,还有一个用于验证. 签名 ?签名是非对称加密的一种应用,使用私钥加密数据,就是对数据的签名 ?签名是将数据通过运算后得到签名信息,被签名的数据发生不论什么改变哪怕这样的改变很细微,也无法获得相同的签名信息. 验签名 ?验签名的过程就是使用公钥对私钥加密的数据解密并验证的过程 ?验签名将被签名数据用同样的运

PKI公钥基础设施(二)

Der二进制编码,base64编码格式的文件中只包含证书(后缀.cer) Pkcs12格式的文件中即包含证书又包含私钥(后缀.pfx..p12) Pkcs7格式的文件中包含证书以及证书链中所有证书(后缀.p7b) pkcs10,客户端向CA申请数字证书的请求(其中包含用户个人信息以及用户公钥信息,P10文件是公钥拥有之后生成的.) pkcs7(p7r),CA回应客户端请求 加密证书的签发流程: 客户端登陆RA注册 RA验证并确认注册信息 RA将证书申请信息提交CA签发中心 KMC生成加密证书的公

使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转)

参考链接:http://happyqing.iteye.com/blog/2139504 :https://blog.csdn.net/arjelarxfc/article/details/52461828 :https://blog.csdn.net/yangxt/article/details/1796965 在看书的时候涉及到了Java的安全加密技术,然后发现生成私钥公钥证书用的是keytool这个jdk自带插件 keytool的主要用法: keytool的几个常用的命令. 1.创建证书

PKI与证书服务

PKI:公钥基础设施(Public Key Infrastructure) 通过使用公钥技术和数字签名来确保信息安全 由公钥加密技术.数字证书.CA.RA组成 PKI体系能够实现的功能: 数据机密性 身份验证 数据完整性 操作的不可否认性 公钥加密技术是PKI的基础: 公钥与私钥关系 成对生成,互不相同,互相加密与解密 不能根据一个密钥来推算出另一个密钥 公钥对外公开,私钥只有私钥持有人才知道 私钥应该由密钥的持有人妥善保管 根据实现的功能不同,可分为数据加密和数字签名 数据加密: 发送方使用接

部署PKI与证书服务给网页加“s”

          部署PKI与证书服务 一.什么是PKI PKI(公钥基础设施),是通过使用公钥技术和数字签名来确保信息安全,并负责验证数字证书持有者身份的一种技术. 本次实验的目的是使用PKI协议中的SSL为了给网页地址"http"后边加"S".浏览网页的时候更安全,不必担心其发送的信息被非法的第三方截获. 二.证书颁发机构 证书颁发机构也称为数字证书认证中心(Certficate  Authority,CA),是PKI应用中权威的.可信任的.公正的第三方机构,