要求目標(biāo)用戶(系統(tǒng))安裝自己的CA根證書,效果是一樣的,還可以省下請(qǐng)權(quán)威CA簽發(fā)證書的費(fèi)用
下面就介紹如何創(chuàng)建自己的CA
1、準(zhǔn)備工作
先在/etc/httpd/conf創(chuàng)建子目錄:
private
certificates
其中private放的是私鑰和CSR(后面會(huì)介紹),certificates里放的就是證書了
2、創(chuàng)建CA私鑰
Openssl代碼
openssl genrsa -out private/ca.key.pem 2048
通過這個(gè)命令,私鑰就創(chuàng)建好了,文件名是ca.key.pem
不過基本上,看也是白看,反正我是看不懂。只知道私鑰里其實(shí)有2組數(shù)字,是用來形成公鑰的,最后也會(huì)包含在證書里
另外,最后的.pem擴(kuò)展名,是表示該私鑰用PEM編碼。實(shí)際上私鑰和證書都是用PEM編碼的,PEM只是一種編碼格式,不需要太在意。httpd可以直接處理這種編碼格式,只要知道證書和私鑰都有編碼,只是編碼是PEM還是PKCS的區(qū)別而已。就像"你好"可以用UTF-8編碼,也可以用GBK編碼一樣,內(nèi)容是不變的
3、創(chuàng)建CA簽名請(qǐng)求
Openssl代碼
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=SZ/L=SZ/O=kyfxbl/OU=kyfxbl/CN=*.kyfxbl.net"
生成的簽名請(qǐng)求文件,是ca.csr
4、自己簽發(fā)CA根證書
Openssl代碼
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer
生成的ca.cer,就是最終的根證書了!這個(gè)文件非常重要,因?yàn)楹罄m(xù)的服務(wù)端證書、客戶端證書,都是用這個(gè)CA簽發(fā)的,也要把它分發(fā)給客戶,讓他們導(dǎo)入到自己的瀏覽器或者系統(tǒng)中
5、把根證書從PEM編碼轉(zhuǎn)為PKCS編碼
Openssl代碼
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12
得到的ca.p12就是轉(zhuǎn)碼后的CA根證書,在不能直接用ca.cer的時(shí)候,就用ca.p12代替
六、簽發(fā)服務(wù)端證書
現(xiàn)在CA根證書和私鑰都有了,就可以開始簽發(fā)服務(wù)端證書了(簽發(fā)請(qǐng)求ca.csr是過程文件,有了cer就不再需要它了,要?jiǎng)h掉也可以)。下面的命令和簽發(fā)CA證書時(shí)都差不多,但是參數(shù)上有區(qū)別
1、創(chuàng)建服務(wù)端私鑰
Openssl代碼
openssl genrsa -out private/server.key.pem 2048
2、創(chuàng)建服務(wù)端證書簽發(fā)請(qǐng)求
Openssl代碼
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=SZ/L=SZ/O=kyfxbl/OU=kyfxbl/CN=www.kyfxbl.net"
和ca.csr的區(qū)別在于,這里的CN不是*.kyfxbl.net,而是www.kyfxbl.net,因?yàn)槲椰F(xiàn)在是在為www.kyfxbl.net申請(qǐng)證書
3、利用CA根證書,簽發(fā)服務(wù)端證書
Openssl代碼
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer
這里和前面自己簽發(fā)CA證書時(shí),參數(shù)區(qū)別就比較大了,最后得到的server.cer,就是服務(wù)端證書
七、測試單向認(rèn)證
接下來用https://localhost來訪問,瀏覽器報(bào)警:
這里就是前面創(chuàng)建CSR時(shí),輸入的CN的作用,這個(gè)證書是為www.kyfxbl.net申請(qǐng)的,這里請(qǐng)求的地址卻是localhost,不匹配所以報(bào)錯(cuò)。為了能用www.kyfxbl.net這個(gè)主機(jī)名來訪問,就需要改一下/etc/hosts文件:
127.0.0.1 localhost
192.168.1.102 www.kyfxbl.net
然后就可以用www.kyfxbl.net來訪問了,再試一下:https://www.kyfxbl.net/
這次瀏覽器還是告警,但是告警信息變了:
證書信息如下:
可以看到這個(gè)證書是由*.kyfxbl.net這個(gè)CA頒發(fā)的,瀏覽器不認(rèn)識(shí),所以不信任由這個(gè)CA簽發(fā)的所有證書。接下來就需要把ca.cer導(dǎo)入瀏覽器。這里直接導(dǎo)入server.cer也是可以的,但是后面如果又創(chuàng)建一個(gè)網(wǎng)站比如說www2.kyfxbl.net,那么又不行了。所以最好的辦法是直接導(dǎo)入CA根證書,那么后續(xù)只要是用這個(gè)根證書簽發(fā)的證書,瀏覽器都會(huì)信任
再次訪問,可以看到成功了,瀏覽器不告警,并且URL欄前面打了一個(gè)綠勾
八、配置雙向認(rèn)證
如果要配置服務(wù)器只允許合法的用戶訪問,就需要配置雙向認(rèn)證
配置為雙向認(rèn)證之后,除了服務(wù)端要發(fā)證書給客戶端之外,客戶端也要發(fā)客戶端證書到服務(wù)端,服務(wù)端認(rèn)證通過,才允許訪問
Httpd代碼
SSLCACertificateFile "/etc/httpd/conf/ca.cer"
SSLVerifyClient require
SSLVerifyDepth 10
在單項(xiàng)認(rèn)證的基礎(chǔ)上,再配置以上3個(gè)參數(shù)
SSLCACertificateFile,這個(gè)意思是當(dāng)客戶端發(fā)來客戶端證書的時(shí)候,httpd用哪個(gè)CA根證書校驗(yàn)它
配置好了,還不能重啟,因?yàn)楝F(xiàn)在客戶端證書還沒做好
這里要說明一下,客戶端證書是怎么來的
有2種方式:
第一種,客戶端也自己CA,然后簽發(fā)證書給自己。把客戶端的CA根證書發(fā)過來,配置成SSLCACertificateFile。這在互聯(lián)網(wǎng)應(yīng)用里基本是不可能的,安全和管理都是問題。但是在企業(yè)應(yīng)用里,還是比較常見的,雙方互相交換CA根證書
第二種,就用剛才服務(wù)端的CA根證書,簽發(fā)一個(gè)客戶端證書,發(fā)給用戶,用戶每次用這個(gè)證書來發(fā)請(qǐng)求,像銀行,支付寶等等,用的是這種方式
當(dāng)然理論上其實(shí)還有一種辦法,就是客戶自己去找權(quán)威CA簽證書,但是這個(gè)是不可能的,因?yàn)楹苈闊?,找CA簽也非常貴
九、簽發(fā)客戶端證書
1、創(chuàng)建客戶端私鑰
Openssl代碼
openssl genrsa -out private/client.key.pem 2048
2、創(chuàng)建客戶端證書簽發(fā)請(qǐng)求
Openssl代碼
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=SZ/L=SZ/O=kyfxbl/OU=kyfxbl/CN=kyfxbl"
3、利用CA根證書,簽發(fā)客戶端證書
Openssl代碼
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/client.csr -out certificates/client.cer
這里和簽發(fā)server.cer基本是一樣的
4、把客戶端證書轉(zhuǎn)換成p12格式
Openssl代碼
openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certificates/client.cer -out certificates/client.p12
這步是必須的,因?yàn)樯院缶托枰芽蛻舳俗C書導(dǎo)入到瀏覽器里,但是一般瀏覽器都不能直接使用PEM編碼的證書
十、測試雙向認(rèn)證
然后再次訪問https://www.kyfxbl.net/,結(jié)果這次不是警告,而是直接報(bào)錯(cuò):
接下來要把client.p12導(dǎo)入到瀏覽器里
導(dǎo)入前:
導(dǎo)入的時(shí)候會(huì)要求輸入密碼,這是為了避免有人偷偷拷貝了別人的客戶端證書,偽裝成合法用戶:
導(dǎo)入后:
然后再次訪問,瀏覽器會(huì)要求選擇證書。這個(gè)步驟是通過雙向認(rèn)證訪問網(wǎng)站時(shí)必須的,但是平時(shí)訪問銀行、支付寶的時(shí)候貌似沒有,這是因?yàn)檫@些網(wǎng)站為了簡化用戶的操作,都會(huì)要求用戶安裝什么“安全控件”,控件自動(dòng)選擇了證書
點(diǎn)擊確定,訪問成功!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。