Harbor安全:cfssl工具为Harbor颁发https证书

Posted 键客李大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Harbor安全:cfssl工具为Harbor颁发https证书相关的知识,希望对你有一定的参考价值。

环境及注意事项

本文以离线安装方式安装2.3.5版本的Harbor,操作系统为CentOS 7.6;
安装目录则为/app/harbor/

注意事项:
为便于后期Harbor的维护,建议将相关的证书放到Harbor的安装目录的ssl子目录下,在备份Harbor数据的时候一起进行备份。

  • 创建证书存放目录
    $ mkdir /app/harbor/ssl

一、cfssl简介

   CFSSL是CloudFlare公司提供的PKI/TLS工具,使用Go语言开发。开源并支持Windows、Linux、macos系统。

工具集:

multirootca:管理多个签名密钥的情形;使用多个签名密钥的证书颁发机构服务器。\\
mkbundle:构建证书池;\\
cfssljson:将从cfssl和multirootca等获得的json格式的输出转化为证书格式的文件(证书,密钥,CSR和bundle)进行存储;\\
cfssl-certinfo:可显示CSR或证书文件的详细信息,可用于证书校验。
cfssljson:将从cfssl和multirootca等获得的json格式的输出转化为证书格式的文件(证书,密钥,CSR和bundle)进行存储;\\
cfssl-certinfo:可显示CSR或证书文件的详细信息;可用于证书校验。

文件说明

  • ca-config.json: 配置文件;
  • ca-csr.json:证书请求文件;
  • xxx-ca.csr:应用证书签名请求文件;
  • xxx-ca.pem:应用服务公钥;
  • xxx-key.pem:应用服务私钥;

<br/>


二、安装cfssl证书管理工具

下载cfssl二进制文件

   在线安装,离线安装到官网下载安装包即可。
下载二进制可执行文件并放入到/usr/local/bin/下

$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl_1.6.0_linux_amd64 -O /usr/local/bin/cfssl
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssljson_1.6.0_linux_amd64 -O /usr/local/bin/cfssljson
$ wget -c https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl-certinfo_1.6.0_linux_amd64 -O /usr/local/bin/cfssl-certinfo

下载时默认没有可执行权限,所以得给这几个工具执行权限:

$ chmod +x  /usr/local/bin/cfssl*

三、生成证书颁发机构证书(CA)

3.1 生成并修改CA默认配置文件

$ cfssl print-defaults  config > /app/harbor/ssl/ca-config.json            #生成默认配置文件
$ cat <<EOF > /app/harbor/ssl/ca-config.json

    "signing": 
        "default": 
            "expiry": "87600h"  
        ,
        "profiles": 
            "harbor": 
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            
        
    

EOF

3.2 生成并修改默认csr请求文件

$ cfssl  print-defaults csr  > /app/harbor/ssl/ca-csr.json
$ cat <<EOF > ca-csr.json

    "CN": "harbor",
    "hosts": [
    ],
    "key": 
        "algo": "rsa",
        "size": 2048
    ,
    "names": [
        
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing"
        
    ]

EOF

<br/>

3.3 初始化CA证书

$ cfssl gencert -initca /app/harbor/ssl/ca-csr.json | cfssljson -bare /app/harbor/ssl/ca 
2022/08/05 17:45:13 [INFO] generating a new CA key and certificate from CSR
2022/08/05 17:45:13 [INFO] generate received request
2022/08/05 17:45:13 [INFO] received CSR
2022/08/05 17:45:13 [INFO] generating key: rsa-2048
2022/08/05 17:45:13 [INFO] encoded CSR
2022/08/05 17:45:13 [INFO] signed certificate with serial number 569300079190788296339255431042064535929535986620
$ ls /app/harbor/ssl/
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

可以看到,当前目录下新生成了ca.csr、ca-key.pem、ca.pem这3个文件。ca-key.pem、ca.pem这两个是CA相关的证书,通过这个CA来向Harbor颁发证书。


四、CA给Harbor颁发证书

  Harbor使用类似于申请表的一个请求文件向CA机构申请证书,CA机构则根据配置文件(证书策略)和请求文件(申请表)向Harbor颁发证书。

4.1 创建并修改Harbor证书请求文件

  使用以下命令创建一个默认的请求文件,但默认的部分参数需要修改。

$ cfssl print-defaults csr > /app/harbor/ssl/harbor-csr.json
$ cat <<EOF > /app/harbor/ssl/harbor-csr.json

    "CN": "192.168.2.22",  #Harbor主机IP
    "hosts": [],
    "key": 
        "algo": "rsa",
        "size": 2048
    ,
    "names": [
        
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing"
        
    ]

EOF

4.2 CA向Harbor颁发证书

  CA使用请求文件根据配置向Harbor颁发证书。

$ cfssl gencert -ca=/app/harbor/ssl/ca.pem \\
-ca-key=/app/harbor/ssl/ca-key.pem \\
-config=/app/harbor/ssl/ca-config.json \\
-profile=harbor  harbor-csr.json | cfssljson -bare  /app/harbor/ssl/harbor 
$ ls /app/harbor/ssl/
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  harbor.csr  harbor-csr.json  harbor-key.pem  harbor.pem
$ cp harbor.pem harbor-key.pem  /app/harbor/ssl/

五、Harbor配置文件中指定证书

5.1 修改配置文件

  修改Habor.yml配置文件,在对应参数指定使用的证书文件。

$ vim /app/harbor/harbor.yml
hostname: 192.168.2.22   #本机IP或域名
http:
  port: 80
https:       #启用https安全访问
  port: 443    #Https安全端口(默认443)
  certificate: /app/harbor/ssl/harbor.pem    #Harbor的证书
  private_key: /app/harbor/ssl/harbor-key.pem  #Harbor的证书私钥

  关于Harbor配置文件每个参数的详细含义,可查看官方文档,或可在【Harbor进阶实战】微信公众号找到,本处仅修改必须的参数。

5.2 浏览器登录Harbor UI

  在浏览器地址栏输入:https://harbor-ip:443
即可访问Harbior UI。

以上是关于Harbor安全:cfssl工具为Harbor颁发https证书的主要内容,如果未能解决你的问题,请参考以下文章

基于CFSSL工具创建CA证书

小佑科技推出免费镜像漏洞扫描工具支持与harbor镜像仓库无缝集成

harbor安装

Harbor镜像拉取凭证配置

#yyds干货盘点#怎样使用cfssl为etcd颁发SSL证书

docker 搭建 Harbor 仓库