創建內網私有CA證書簽署自定義域名證書


一、背景

  研究了好久如何創建一個可供https和docker倉庫使用的內網證書,最終參考這篇文章( https://www.mogublog.net/post/2443.html )和自己的摸索搞定了。用於網站的證書其實很好建,一條命令既可:“openssl req -new -x509 -days 3560 -nodes -out web.crt -keyout web.key ”。問題是,這種方式創建的證書有幾個問題:
  1、不能用於docker的registry倉庫服務,docker會認為證書不合法,拉取、推送鏡像時都會報錯。
  2、每生成一個證書,每個客戶端瀏覽器或軟件就需要信任一次,或者在客戶端操作系統導入一次。特別是訪問自建的centos系統的yum倉庫(https),需要修改各個客戶端的yum配置或導入到系統證書目錄。(因此需要自建CA證書,客戶端導入CA證書,這樣用CA生成的所有證書在客戶端都能信任)
  3、瀏覽器即便信任了證書,還是會出現“不安全連接”的提示。
  因此需要創建CA證書,然后用CA證書生成一個規范的域名證書,才能滿足上述所有需要。創建證書可以使用前面那篇文章的腳本。我的創建、部署過程如下:

二、創建證書

1、CA證書創建腳本createCA.sh

#!/bin/bash

mkdir CA
cd CA
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=CN/ST=SC/L=CD/O=COMPANY/OU=ServerOperation/CN=neiwang.yuming/emailAddress=someone@neiwang.yuming"
echo "1" > serial

# Useage: sh createCA.sh

  我舉例使用了內網自建域名“neiwang.yuming”,只要你的自建dns能解析,域名可以使用自定義域名。CA證書過期時間設置為100年! 😄
  執行sh createCA.sh創建出CA證書,需要保管好創建出的ca.crt和ca.key文件,不應對外暴露ca.key,必要時還應考慮對ca.key加密。

2、簽署證書腳本signDoamin.sh

#!/bin/bash

mkdir ${1}
cd ${1}
echo "[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = CN
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = SC
localityName                = Locality Name (eg, city)
localityName_default        = CD
organizationName            = Organization Name (eg, company)
organizationName_default    = COMPANY
organizationalUnitName            = Organizational Unit Name (eg, section)
organizationalUnitName_default    = ServerOperation
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = ${1}

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = ${1}
#IP.1   = ${1}
" > san.conf

openssl genrsa -out ${1}.key 4096

openssl req -new -key ${1}.key -out ${1}.csr -config san.conf -sha256

# serial 唯一
serial=$(cat ../CA/serial)
openssl x509 -req -days 18250 -in ${1}.csr -CA ../CA/ca.crt -CAkey ../CA/ca.key -set_serial $((serial+1)) -out ${1}.crt -extfile san.conf -extensions req_ext
echo $((serial+1)) > ../CA/serial

# Useage: sh signDoamin.sh yourdomain.suffix

  域名過期時間我設置為50年! 😄
  執行sh signDoamin.sh svrops.neiwang.yuming,創建出域名為svrops.neiwang.yuming的證書。

三、部署證書

1、在服務器端部署web證書

  將簽署生成的svrops.neiwang.yuming.crt、svrops.neiwang.yuming.key文件加載至web服務。

2、在客戶端部署CA證書

2.1、客戶端為centos7

  將生成的ca.crt文件重命名為neiwang.yuming-CA.crt,然后拷貝到客戶端centos7系統的/etc/pki/ca-trust/source/anchors/目錄中。然后執行update-ca-trust命令使證書生效。注意,如果是使用docker訪問服務器端,則還需要重啟docker服務!(如果docker設置了代理,則要注意將該域名加入NoProxy列表,我就犯了這個低級錯誤,浪費了時間!下同)

2.2、客戶端為ubuntu

  將生成的ca.crt文件重命名為neiwang.yuming-CA.crt,然后拷貝到客戶端ubuntu系統的/usr/local/share/ca-certificates/目錄中。然后執行update-ca-certificates命令使證書生效。注意,如果是使用docker訪問服務器端,則還需要重啟docker服務!

2.3、客戶端為windows

  將生成的ca.crt文件導入IE、firefox瀏覽器即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM