站長資訊網
        最全最豐富的資訊網站

        公鑰基礎設施(PKI)/CFSSL證書生成工具的使用

        公鑰基礎設施(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

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 最新国产精品精品视频| 国产成人精品一区二区三区| 成人午夜精品网站在线观看| 欧美精品高清在线xxxx| 视频二区国产精品职场同事| 国产日韩精品中文字无码| 亚洲国产精品一区二区第四页| 成人国产精品日本在线观看| av国内精品久久久久影院| 亚洲日韩中文在线精品第一| 国产精品日日摸夜夜添夜夜添1国产精品va欧美精 | 国产精品91在线| 热re99久久6国产精品免费| 亚洲国产精品碰碰| 九九精品在线视频| 国产精品成| 91人前露出精品国产| 92国产精品午夜福利| 精品久久人妻av中文字幕| 日产欧美国产日韩精品| 亚洲精品乱码久久久久久| 亚洲а∨天堂久久精品9966| 日韩午夜高清福利片在线观看欧美亚洲精品suv| 91精品国产综合久久香蕉| 2022精品天堂在线视频| 国产精品白浆在线观看免费| 亚洲国产精品成人精品无码区| 中文精品久久久久人妻不卡| 亚洲一日韩欧美中文字幕欧美日韩在线精品一区二 | 精品成人免费自拍视频| 538国产精品一区二区在线| 国产精品露脸国语对白| 精品无码久久久久国产| 精品无码人妻一区二区免费蜜桃 | 久久久久人妻精品一区二区三区| 亚洲欧美国产精品专区久久| 亚洲一区二区精品视频| 无码人妻精品一区二区三区久久久 | 亚洲AV日韩精品久久久久久久| 日韩精品一区二区三区色欲AV| 精品无码一区二区三区亚洲桃色|