• CFSSL创建HTTPS证书


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

    CFSSL包括:
    一组用于生成自定义 TLS PKI 的工具
    cfssl程序,是CFSSL的命令行工具
    multirootca程序是可以使用多个签名密钥的证书颁发机构服务器
    mkbundle程序用于构建证书池
    cfssljson程序,从cfssl和multirootca程序获取JSON输出,并将证书,密钥,CSR和bundle写入磁盘
    PKI借助数字证书和公钥加密技术提供可信任的网络身份。通常,证书就是一个包含如下身份信息的文件:
    证书所有组织的信息
    公钥
    证书颁发组织的信息
    证书颁发组织授予的权限,如证书有效期、适用的主机名、用途等
    使用证书颁发组织私钥创建的数字签名

    1.需要安裝CFSSL工具,这将会用來建立 TLS Certificates
    export CFSSL_URL="https://pkg.cfssl.org/R1.2"
    wget "${CFSSL_URL}/cfssl_linux-amd64" -O /usr/local/bin/cfssl
    wget "${CFSSL_URL}/cfssljson_linux-amd64" -O /usr/local/bin/cfssl-json
    chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssl-json
    
    2. 建立集群CA keys 与Certificates

    创建认证中心(CA)
    CFSSL可以创建一个获取和操作证书的内部认证中心。
    运行认证中心需要一个CA证书和相应的CA私钥。任何知道私钥的人都可以充当CA颁发证书。因此,私钥的保护至关重要。
    生成CA证书和私钥(root 证书和私钥)

    单个域名证书
    # cat  ca-csr.json
    {
    	"CN": "dashboard.rongbiz.cn",
    	"key": {
    		"algo": "rsa",
    		"size": 2048
    	},
    	"names": [{
    		"C": "CN",
    		"ST": "ShangHai",
    		"L": "ShangHai",
    		"O": "Kubernetes",
    		"OU": "system"
    	}]
    }
    
    
    
    泛域名证书
    # cat ca-csr.json 
    {
    	"CN": "rongbiz.cn",
            "hosts": [
            "rongbiz.cn",
            "*.rongbiz.cn"
        ],
    	"key": {
    		"algo": "rsa",
    		"size": 2048
    	},
    	"names": [{
    		"C": "CN",
    		"ST": "ShangHai",
    		"L": "ShangHai",
    		"O": "Kubernetes",
    		"OU": "system"
    	}]
    }
    

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

    C: Country, 国家

    L: Locality,地区,城市

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

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

    ST: State,州,省

    3.打包证书
    [root@k8s-m1 ~]# cfssl gencert -initca ca-csr.json | cfssl-json -bare ca
    2018/09/04 17:54:27 [INFO] generating a new CA key and certificate from CSR
    ...................................
    364071858086685410343971601073438442568349313139
    [root@k8s-m1 ~]#  ls ca*
    ca.csr  ca-csr.json  ca-key.pem  ca.pem
    
    4.确定证书类型
    [root@k8s-m1 ~]# cat ca-config.json 
    {
    	"signing": {
    		"default": {
    			"expiry": "87600h"
    		},
    		"profiles": {
    			"peer": {
    				"usages": ["signing", "key encipherment", "server auth", "client auth"],
    				"expiry": "87600h"
    			}
    		}
    	}
    }
    

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

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

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

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

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

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

    5.使用现有的CA私钥,生成证书
    [root@k8s-m1 ~]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer ca-csr.json | cfssljson -bare dashboard.rongbiz.cn
    
    6.验证
     NGINX配置
        server {
            listen       443 ssl http2 default_server;
            listen       [::]:443 ssl http2 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
            ssl_certificate "/etc/nginx/ssl/dashboard.rongbiz.cn.pem";    #CRT
            ssl_certificate_key "/etc/nginx/ssl/dashboard.rongbiz.cn-key.pem";  #key 
    .....
    
    7.cfssl常用命令:
    cfssl gencert -initca ca-csr.json | cfssl-json -bare ca ## 初始化ca
    
    cfssl gencert -initca -ca-key key.pem ca-csr.json | cfssl-json -bare ca ## 使用现有私钥, 重新生成
    
    cfssl cert-info -cert ca.pem
    
    cfssl cert-info -csr ca.csr
    

    查看cert(证书信息):

    # cfssl certinfo -cert ca.pem​
    

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

    # cfssl cert-info -csr ca.csr​​
    
    8.参考

    http://blog.51cto.com/liuzhengwei521/2120535?utm_source=oschina-app

    https://www.cnblogs.com/aguncn/p/7087599.html

    http://blog.leanote.com/post/criss/CFSSL创建HTTPS证书

  • 相关阅读:
    hdu 1978 How many ways
    hdu 2209 翻纸牌游戏
    hdu 2149 Public Sale (博弈规律题)
    CF 353C Find Maximum #205 (Div. 2)
    barrier and Fence
    window coordinate
    GPU hang
    the application was unable to start correctly 0xc000007b
    vertex buffer 数据结构 如何读vb的memory pool
    map
  • 原文地址:https://www.cnblogs.com/yangtao416/p/15044305.html
Copyright © 2020-2023  润新知