自建CA与签发证书
CA
簡介
在加密中,證書頒發機構或證書頒發機構(CA)是頒發數字證書的實體。數字證書通過證書的指定主題來證明公鑰的所有權。這允許其他人(依賴方)依賴簽名或關于與經認證的公鑰對應的私鑰的斷言。CA充當受信任的第三方 -由證書的主體(所有者)和依賴證書的一方信任。這些證書的格式由X.509標準指定。
證書頒發機構的一個特別常見的用途是簽署HTTPS中使用的證書,這是萬維網的安全瀏覽協議。另一個常見用途是由國家政府簽發身份證,用于電子簽名文件。
X.509證書組成
- 證書
- 版本號
- 序列號
- 簽名算法
- 頒發者
- 證書有效期
- 此日期前無效
- 此日期后無效
- 主題
- 主題公鑰信息
- 公鑰算法
- 主題公鑰
- 頒發者唯一身份信息(可選項)
- 主題唯一身份信息(可選項)
- 擴展信息(可選項)
- …
- 證書簽名算法
- 數字簽名
自建CA
實驗環境
IP 192.168.253.128
系統 Centos7
openssl的配置文件為/etc/pki/tls/openssl.cnf
下面為截取的部分,對自建CA比較關鍵的一些信息部分
[ CA_default ]dir = /etc/pki/CA # CA存放的目錄 certs = $dir/certs # 保存簽入數字證書的目錄 crl_dir = $dir/crl # 證書吊銷列表存放的目錄 database = $dir/index.txt # 數據庫索引文件 new_certs_dir = $dir/newcerts # 用于存放新證書存放的位置 certs. certificate = $dir/cacert.pem # 自簽證書 serial = $dir/serial # 序列號文件 crlnumber = $dir/crlnumber # 當前crl(證書吊銷列表)序列號 private_key = $dir/private/cakey.pem# CA自己的私鑰[ req ] default_bits = 2048 #生成證書請求用到的私鑰的密鑰長度 default_md = sha256 #證書請求簽名時的單項加密算法 default_keyfile = privkey.pem #默認新創建的私鑰存放位置 distinguished_name = req_distinguished_name #可識別字段第一部分,自建CA
在確定配置為CA的服務器上生成一個自簽證書,并為CA提供所需要的目錄及文件即可;具體如下
a.生成私鑰,大小為4096bit,因為私鑰是一個很重要的文件,所以權限一定要嚴格,這里用括號是創建子進程,設置umask,不影響當前進程的umask。這里的私鑰文件/etc/pki/CA/private/cakey.pem在配置文件定義了,不能隨便更改
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
b.生成自簽證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
- -new:生成新證書簽署請求;
- -x509:生成自簽格式證書,專用于創建私有CA時;
- -key:生成請求時用到的私有文件路徑;
- -out:生成的請求文件的路徑;如果自簽操作將直接生成簽署過的證書;
- -days:證書的有效時長,單位是day;
c.為CA提供所需的目錄及文件(先查看是否存在,如果存在則不需要創建)
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
touch /etc/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial
創建后的目錄結構
[root@localhost ~]# tree /etc/pki/CA /etc/pki/CA ├── cacert.pem ├── certs ├── crl ├── index.txt ├── newcerts ├── private │ └── cakey.pem └── serial第二部分,簽發證書
安裝nginx服務這里不是重點,簡單安裝一下
上傳之前下載好的nginx的tar包
a.用到證書的主機(這里的主機與CA為相同的服務器)生成私鑰;
mkdir /usr/local/nginx/ssl
cd /usr/local/nginx/ssl
(umask 077; openssl genrsa -out /usr/local/nginx/ssl/nginx.key 2048)
b.生成證書簽署請求
openssl req -new -key /usr/local/nginx/ssl/nginx.key -out /usr/local/nginx/ssl/nginx_ssl.csr -days 365
c.將請求通過可靠方式發送給CA主機(scp或者u盤等都可以)因為我這里都在同一臺主機,所以沒有這個步驟
d.在CA主機上簽署證書;/usr/local/nginx/ssl/nginx_ssl.csr 這個文件是剛才我們生成的證書簽署請求,/usr/local/nginx/ssl/nginx_ssl.crt這個文件是我們需要的證書
openssl ca -in /usr/local/nginx/ssl/nginx_ssl.csr -out /usr/local/nginx/ssl/nginx_ssl.crt
e.查看證書中的信息,驗證一下
openssl x509 -in /usr/local/nginx/ssl/nginx_ssl.crt -noout -serial -subject
第三部分,使用證書
這里用nginx配置
server {listen 443 ssl; ##監聽443端口server_name www.hal.com; ##與證書匹配的域名ssl on; ##允許ssl連接ssl_certificate /usr/local/nginx/ssl/nginx_ssl.crt;#證書的路徑ssl_certificate_key /usr/local/nginx/ssl/nginx.key;#web服務器私鑰路徑ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root html;index index.html index.htm;}}測試一下配置文件有沒有問題
[root@localhost ssl]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful關閉防火墻和selinux然后啟動nginx
systemctl stop firewalld setenforce 0 nginx因為這個域名沒有買,所以需要在本地做一個解析
修改這個目錄C:\Windows\System32\drivers\etc下的hosts文件添加一條記錄
然后用瀏覽器訪問,因為是私人的CA所以瀏覽器提示不安全很正常,這里可以在設置那里將CA的自簽證書導入就可以了,這里不導了
第四部分,吊銷證書(很少用)
a.客戶端獲取要吊銷的證書的serial(在使用證書的主機執行):
openssl x509 -in /usr/local/nginx/ssl/nginx_ssl.crt -noout -serial -subject
b. CA主機吊銷證書
先根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致;
c.吊銷
格式:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
其中的SERIAL要換成證書真正的序列號;在吊銷證書的第一步得到的那個serial編碼是01 所以需要變成下面這條命令openssl ca -revoke /etc/pki/CA/newcerts/01.pemd.生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
echo 01 > /etc/pki/CA/crlnumber
e.更新證書吊銷列表
openssl ca -gencrl -out /etc/pki/CA/newcerts/01.pem
總結
- 上一篇: sketchup插件管理器速图外挂SuT
- 下一篇: 终端运行ipynb文件