欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
httpd設置HTTPS雙向認證
     去年用tomcat、jboss配置過(guò)HTTPS雙向認證,那時(shí)候主要用的是JDK自帶的keytool工具。這次是用httpd + openssl,區別比較大

在網(wǎng)上搜索了很多文章,發(fā)現全面介紹的不多,或者就是版本比較舊了。所以把我配置的過(guò)程完整地記錄下來(lái),以供參考

首先要說(shuō)明一下,HTTPS涉及到的內容非常繁雜,包括各種術(shù)語(yǔ)、命令、算法,我現在也沒(méi)有完全搞清楚。本文會(huì )盡量把我知道的解釋一下,但是深入的內容,暫時(shí)不打算深究了

一、環(huán)境

httpd: 2.4.4
openssl:1.0.1
os:ubuntu 12.04 LTS

二、場(chǎng)景

我準備在httpd上配置一個(gè)HTTPS雙向認證,既向客戶(hù)端表明自己的身份,也只允許特定的客戶(hù)端訪(fǎng)問(wèn)。本文說(shuō)的主要是作為server的角色的配置,至于作為client的配置,最后也會(huì )稍微介紹一下,但是不會(huì )詳細說(shuō)明

一般來(lái)說(shuō),互聯(lián)網(wǎng)站不會(huì )去配置雙向認證,因為客戶(hù)端證書(shū)的分發(fā)和管理會(huì )比較麻煩,會(huì )把用戶(hù)擋在門(mén)外,所以一般是不能這么做的。當然,像銀行等對安全要求很高的網(wǎng)站,也會(huì )采用雙向認證,比如U盾、安全控件什么的,其實(shí)就是固化的客戶(hù)端證書(shū)

但是對于企業(yè)應用來(lái)說(shuō),客戶(hù)一般是固定的,比如兩個(gè)已知的系統對接、內部系統集成等。所以在企業(yè)應用領(lǐng)域,雙向認證還是比較常見(jiàn)的

三、背景知識

證書(shū)(Certificate)是HTTPS的核心,但是其實(shí)證書(shū)并不是一個(gè)單一的東西,而是幾種技術(shù)的綜合

為了網(wǎng)絡(luò )傳輸的安全,有很多種技術(shù),最主要的是以下3種:

1、加密/解密

避免消息明文傳輸,對消息進(jìn)行加密。早期一般是用對稱(chēng)加密算法,現在一般都是不對稱(chēng)加密,最常見(jiàn)的算法就是RSA。在后面的介紹中,也會(huì )多次看到RSA這個(gè)詞

2、消息摘要

這個(gè)技術(shù)主要是為了避免消息被篡改。消息摘要是把一段信息,通過(guò)某種算法,得出一串字符串。這個(gè)字符串就是消息的摘要。如果消息被篡改(發(fā)生了變化),那么摘要也一定會(huì )發(fā)生變化(一般是這樣的。如果2個(gè)不同的消息生成的摘要是一樣的,那么這就叫發(fā)生了碰撞)

消息摘要的算法主要有MD5和SHA,在證書(shū)領(lǐng)域,一般都是用SHA(安全哈希算法)

3、數字簽名

數字簽名是為了驗證雙方的身份,避免身份偽造

以上三個(gè)技術(shù)結合起來(lái),就是在HTTPS中廣泛應用的證書(shū)(certificate),證書(shū)本身攜帶了加密/解密的信息,并且可以標識自己的身份,也自帶消息摘要

四、在httpd中配置單向HTTPS

首先在%HTTPD_HOME%/conf/目錄下,修改httpd.conf文件,加載必要的模塊
Httpd代碼  
  1. LoadModule socache_shmcb_module modules/mod_socache_shmcb.so  
  2. LoadModule socache_dbm_module modules/mod_socache_dbm.so  
  3. LoadModule socache_memcache_module modules/mod_socache_memcache.so  
  4. LoadModule ssl_module modules/mod_ssl.so  

這里的前提是,在編譯httpd的時(shí)候,已經(jīng)編譯了ssl模塊。這個(gè)步驟看另一篇文檔:
http://kyfxbl.iteye.com/blog/1902299

然后再導入默認的SSL配置文件,當然也可以選擇不導入,在httpd.conf直接配置。但是導入默認的可以節省很多時(shí)間,并且默認的文件是用vhost配置的,不會(huì )跟main server沖突,可以算是一種最佳實(shí)踐
Httpd代碼  
  1. # Secure (SSL/TLS) connections  
  2. Include conf/extra/httpd-ssl.conf  
  3.   
  4. <IfModule ssl_module>  
  5. SSLRandomSeed startup builtin  
  6. SSLRandomSeed connect builtin  
  7. </IfModule>  

然后打開(kāi)%HTTPD_HOME%/conf/extra/目錄,看一下httpd-ssl.conf,主要有以下幾個(gè)配置
Httpd代碼  
  1. SSLEngine on  
  2. SSLCertificateFile "/usr/local/httpd/conf/server.cer"  
  3. SSLCertificateKeyFile "/usr/local/httpd/conf/server.key.pem"  
  4. #SSLCACertificateFile "/usr/local/httpd/conf/ca.cer"  
  5. #SSLVerifyClient require  
  6. #SSLVerifyDepth  10  

只要開(kāi)啟前3個(gè),單向的HTTPS認證就配置好了。后面3個(gè)目前先注釋掉,是后面雙向認證才用到

然后重啟一下httpd,會(huì )發(fā)現報錯:

AH00526: Syntax error on line 106 of /usr/local/httpd/conf/extra/httpd-ssl.conf:
SSLCertificateFile: file '/usr/local/httpd/conf/server.cer' does not exist or is empty

這是因為httpd需要一個(gè)服務(wù)端的私鑰(.key.pem),和一個(gè)服務(wù)端證書(shū)(.cer)。前面已經(jīng)配置了這2個(gè)文件的路徑,但是還沒(méi)有創(chuàng )建。下一步就要創(chuàng )建這些文件

五、創(chuàng )建CA(Certificate Authority)

這個(gè)CA,也叫“根證書(shū)”

服務(wù)端做了一個(gè)證書(shū),但是這是沒(méi)有法律效力的,誰(shuí)都可以自己做證書(shū),就根本達不到安全的目的。所以就要有一個(gè)機構,負責來(lái)確認服務(wù)端的身份,然后統一的簽發(fā)證書(shū)。這樣才能有權威性

當瀏覽器通過(guò)HTTPS協(xié)議訪(fǎng)問(wèn)一個(gè)網(wǎng)站,網(wǎng)站首先會(huì )發(fā)過(guò)來(lái)一個(gè)自己的證書(shū)(certificate)。接下來(lái)瀏覽器就會(huì )到權威機構(CA),去驗證一下這個(gè)證書(shū)是不是它簽發(fā)的。如果是的話(huà),就信任這個(gè)網(wǎng)站的證書(shū),繼續訪(fǎng)問(wèn);如果不是的話(huà),要怎么處理就依賴(lài)于實(shí)現了。一般的瀏覽器會(huì )彈出一個(gè)警告,讓用戶(hù)自己決定要不要繼續訪(fǎng)問(wèn)。當然直接拒絕也是可以的

現在國際上有3大CA機構,如果是要自己做一個(gè)網(wǎng)站的話(huà),如上所述,一般是需要請這些權威機構幫忙簽發(fā)證書(shū)的?,F在所有的主流瀏覽器,默認都安裝了這些CA的根證書(shū),所以如果網(wǎng)站的證書(shū)是這些權威機構簽發(fā)的,瀏覽器就不會(huì )發(fā)出警告了。比如支付寶,它的證書(shū)是由VeriSign簽發(fā)的,所以訪(fǎng)問(wèn)支付寶,瀏覽器不會(huì )發(fā)出警告



這里還有一個(gè)鏈條的關(guān)系,比如我有10個(gè)子網(wǎng)站,如果每個(gè)都要去找CA簽發(fā)證書(shū),就很麻煩。我可以找CA給我簽發(fā)一個(gè)次級根證書(shū),然后再用這個(gè)次級根證書(shū)給自己簽發(fā)10個(gè)證書(shū)。那么只要客戶(hù)的瀏覽器里有CA根證書(shū)就可以了,這10個(gè)證書(shū)都可以通過(guò)認證,不要求客戶(hù)安裝次級根證書(shū),原文見(jiàn)下:

引用
Intermediate CA certificates lie between the root CA certificate (which is installed in the browsers) and the server certificate (which you installed on the server).


如果是企業(yè)應用,那完全可以自己給自己當CA,因為可以要求目標用戶(hù)(系統)安裝自己的CA根證書(shū),效果是一樣的,還可以省下請權威CA簽發(fā)證書(shū)的費用(互聯(lián)網(wǎng)應用分發(fā)自己的CA到無(wú)數的互聯(lián)網(wǎng)用戶(hù)上,難度很大)

下面就介紹如何創(chuàng )建自己的CA

1、準備工作

先在隨便一個(gè)目錄,創(chuàng )建以下幾個(gè)子目錄:
/private
/certificates

其中private放的是私鑰和CSR(后面會(huì )介紹),certificates里放的就是證書(shū)了

2、創(chuàng )建CA私鑰
Openssl代碼  
  1. openssl genrsa -aes256 -out private/ca.key.pem 2048  

最后的參數是RSA密鑰的長(cháng)度,默認是512。2048其實(shí)長(cháng)了一點(diǎn),老的瀏覽器稍后會(huì )不支持,不過(guò)現在的主流瀏覽器都是支持的,所以問(wèn)題不大

通過(guò)這個(gè)命令,私鑰就創(chuàng )建好了,文件名是ca.key.pem

用這個(gè)命令,可以看一下剛才創(chuàng )建的這個(gè)私鑰的信息
Openssl代碼  
  1. openssl rsa -noout -text -in private/ca.key.pem  

不過(guò)基本上,看也是白看,反正我是看不懂。只知道私鑰里其實(shí)有2組數字,是用來(lái)形成公鑰的,最后也會(huì )包含在證書(shū)里

引用

A private key contains a series of numbers. Two of these numbers form the "public key", the others are part of the "private key". The "public key" bits are included when you generate a CSR, and subsequently form part of the associated Certificate.


另外,最后的.pem擴展名,是表示該私鑰用PEM編碼。實(shí)際上私鑰和證書(shū)都是用PEM編碼的,PEM只是一種編碼格式,不需要太在意。httpd可以直接處理這種編碼格式,但是瀏覽器和JAVA都不行,所以在需要的時(shí)候,會(huì )把編碼從PEM改成PKCS,后面會(huì )介紹。只要知道證書(shū)和私鑰都有編碼,只是編碼是PEM還是PKCS的區別而已。就像"你好"可以用UTF-8編碼,也可以用GBK編碼一樣,內容是不變的

3、創(chuàng )建CA簽名請求
Openssl代碼  
  1. 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"  

這里要注意的是,如果不用-subj參數,那么就會(huì )在命令行交互輸入簽發(fā)目標的身份識別信息,這叫DN(Distinguished Name)。其中別的都不要緊,最重要的是CN那一行,因為我這里是根證書(shū),所以我設置為*.kyfxbl.net,這樣我后面用這個(gè)CA簽發(fā)的www.kyfxbl.net、game.kyfxbl.net、news.kyfxbl.net……,全都是有效的

生成的簽名請求文件,是ca.csr
Openssl代碼  
  1. openssl req -noout -text -in private/ca.csr  

同上,看不懂

4、自己簽發(fā)CA根證書(shū)
Openssl代碼  
  1. openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer  

這里參數很復雜,我也不太清楚準確的意思是什么,可以用openssl x509 -help自己研究一下

生成的ca.cer,就是最終的根證書(shū)了!這個(gè)文件非常重要,因為后續的服務(wù)端證書(shū)、客戶(hù)端證書(shū),都是用這個(gè)CA簽發(fā)的,也要把它分發(fā)給客戶(hù),讓他們導入到自己的瀏覽器或者系統中

查看的命令是:
Openssl代碼  
  1. openssl x509 -noout -text -in certificates/ca.cer  


5、把根證書(shū)從PEM編碼轉為PKCS編碼

這步其實(shí)不是必選的,但是前面說(shuō)過(guò),JAVA環(huán)境是不能直接用PEM編碼的證書(shū)的,很多瀏覽器也不行,所以有時(shí)候也需要轉一下編碼
Openssl代碼  
  1. openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12  

得到的ca.p12就是轉碼后的CA根證書(shū),在不能直接用ca.cer的時(shí)候,就用ca.p12代替

六、簽發(fā)服務(wù)端證書(shū)

現在CA根證書(shū)和私鑰都有了,就可以開(kāi)始簽發(fā)服務(wù)端證書(shū)了(簽發(fā)請求ca.csr是過(guò)程文件,有了cer就不再需要它了,要刪掉也可以)。下面的命令和簽發(fā)CA證書(shū)時(shí)都差不多,但是參數上有區別

1、創(chuàng )建服務(wù)端私鑰
Openssl代碼  
  1. openssl genrsa -aes256 -out private/server.key.pem 2048  

2、創(chuàng )建服務(wù)端證書(shū)簽發(fā)請求
Openssl代碼  
  1. 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的區別在于,這里的CN不是*.kyfxbl.net,而是www.kyfxbl.net,因為我現在是在為www.kyfxbl.net申請證書(shū)

3、利用CA根證書(shū),簽發(fā)服務(wù)端證書(shū)
Openssl代碼  
  1. 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í),參數區別就比較大了,最后得到的server.cer,就是服務(wù)端證書(shū)

七、測試單向認證

把server.key.pem和server.cer拷貝到%HTTPD_HOME%/conf/目錄下,然后重新啟動(dòng)httpd,會(huì )要求輸入一個(gè)密碼



然后訪(fǎng)問(wèn)http://localhost:443/,會(huì )報400錯誤:



接下來(lái)用https://localhost:443來(lái)訪(fǎng)問(wèn),瀏覽器報警:



這里就是前面創(chuàng )建CSR時(shí),輸入的CN的作用,這個(gè)證書(shū)是為www.kyfxbl.net申請的,這里請求的地址卻是localhost,不匹配所以報錯。為了能用www.kyfxbl.net這個(gè)主機名來(lái)訪(fǎng)問(wèn),就需要改一下/etc/hosts文件:

127.0.0.1       localhost
192.168.1.102   www.kyfxbl.net

然后就可以用www.kyfxbl.net來(lái)訪(fǎng)問(wèn)了,再試一下:https://www.kyfxbl.net/

這次瀏覽器還是告警,但是告警信息變了:



證書(shū)信息如下:



可以看到這個(gè)證書(shū)是由*.kyfxbl.net這個(gè)CA頒發(fā)的,瀏覽器不認識,所以不信任由這個(gè)CA簽發(fā)的所有證書(shū)。接下來(lái)就需要把ca.cer導入瀏覽器。這里直接導入server.cer也是可以的,但是后面如果又創(chuàng )建一個(gè)網(wǎng)站比如說(shuō)www2.kyfxbl.net,那么又不行了。所以最好的辦法是直接導入CA根證書(shū),那么后續只要是用這個(gè)根證書(shū)簽發(fā)的證書(shū),瀏覽器都會(huì )信任

導入前:



導入后:



再次訪(fǎng)問(wèn),可以看到成功了,瀏覽器不告警,并且URL欄前面打了一個(gè)綠勾



八、配置雙向認證

如果要配置服務(wù)器只允許合法的用戶(hù)訪(fǎng)問(wèn),就需要配置雙向認證

配置為雙向認證之后,除了服務(wù)端要發(fā)證書(shū)給客戶(hù)端之外,客戶(hù)端也要發(fā)客戶(hù)端證書(shū)到服務(wù)端,服務(wù)端認證通過(guò),才允許訪(fǎng)問(wèn)

Httpd代碼  
  1. SSLCACertificateFile "/usr/local/httpd/conf/ca.cer"  
  2. SSLVerifyClient require  
  3. SSLVerifyDepth  10  

在單項認證的基礎上,再配置以上3個(gè)參數

SSLCACertificateFile,這個(gè)意思是當客戶(hù)端發(fā)來(lái)客戶(hù)端證書(shū)的時(shí)候,httpd用哪個(gè)CA根證書(shū)校驗它

配置好了,還不能重啟,因為現在客戶(hù)端證書(shū)還沒(méi)做好

這里要說(shuō)明一下,客戶(hù)端證書(shū)是怎么來(lái)的

有2種方式:

第一種,客戶(hù)端也自己CA,然后簽發(fā)證書(shū)給自己。把客戶(hù)端的CA根證書(shū)發(fā)過(guò)來(lái),配置成SSLCACertificateFile。這在互聯(lián)網(wǎng)應用里基本是不可能的,安全和管理都是問(wèn)題。但是在企業(yè)應用里,還是比較常見(jiàn)的,雙方互相交換CA根證書(shū)

第二種,就用剛才服務(wù)端的CA根證書(shū),簽發(fā)一個(gè)客戶(hù)端證書(shū),發(fā)給用戶(hù),用戶(hù)每次用這個(gè)證書(shū)來(lái)發(fā)請求,像銀行,支付寶等等,用的是這種方式

當然理論上其實(shí)還有一種辦法,就是客戶(hù)自己去找權威CA簽證書(shū),但是這個(gè)是不可能的,因為很麻煩,找CA簽也非常貴

本文用的是第2種方法。其實(shí)都是一樣的。關(guān)鍵還是在CA根證書(shū)上,所以前面也說(shuō)過(guò)了,CA根證書(shū)非常重要

九、簽發(fā)客戶(hù)端證書(shū)

1、創(chuàng )建客戶(hù)端私鑰
Openssl代碼  
  1. openssl genrsa -aes256 -out private/client.key.pem 2048  

2、創(chuàng )建客戶(hù)端證書(shū)簽發(fā)請求
Openssl代碼  
  1. 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"  

這里的不同在于,這里的CN不是*.kyfxbl.net,也不是www.kyfxbl.net,隨便填一個(gè)kyfxbl就好了,或者干脆叫user都沒(méi)問(wèn)題,反正是一個(gè)客戶(hù)端證書(shū)

3、利用CA根證書(shū),簽發(fā)客戶(hù)端證書(shū)
Openssl代碼  
  1. 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、把客戶(hù)端證書(shū)轉換成p12格式
Openssl代碼  
  1. openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certificates/client.cer -out certificates/client.p12  

這步是必須的,因為稍后就需要把客戶(hù)端證書(shū)導入到瀏覽器里,但是一般瀏覽器都不能直接使用PEM編碼的證書(shū)

十、測試雙向認證

把ca.cer拷貝到%HTTPD_HOME%/conf/目錄下,重啟httpd

然后再次訪(fǎng)問(wèn)https://www.kyfxbl.net/,結果這次不是警告,而是直接報錯:



接下來(lái)要把client.p12導入到瀏覽器里

導入前:



導入的時(shí)候會(huì )要求輸入密碼,這是為了避免有人偷偷拷貝了別人的客戶(hù)端證書(shū),偽裝成合法用戶(hù):



導入后:



然后再次訪(fǎng)問(wèn),瀏覽器會(huì )要求選擇證書(shū)。這個(gè)步驟是通過(guò)雙向認證訪(fǎng)問(wèn)網(wǎng)站時(shí)必須的,但是平時(shí)訪(fǎng)問(wèn)銀行、支付寶的時(shí)候貌似沒(méi)有,這是因為這些網(wǎng)站為了簡(jiǎn)化用戶(hù)的操作,都會(huì )要求用戶(hù)安裝什么“安全控件”,控件自動(dòng)選擇了證書(shū)

   

點(diǎn)擊確定,訪(fǎng)問(wèn)成功!

十一、JKS等

到這里,用httpd配置雙向HTTPS認證就完成了

本文說(shuō)的是作為server的角色,要如何配置。但是在JAVA環(huán)境下,如果要以client的角色,通過(guò)雙向認證發(fā)起請求,則還有些不同

這里實(shí)際上是要充當一個(gè)類(lèi)似瀏覽器的角色,需要校驗server certificate,還需要在發(fā)起請求的時(shí)候,把client certificate發(fā)過(guò)去

在JAVA里,是通過(guò)keystore和truststore來(lái)實(shí)現的,不在本文的討論范圍內??梢钥匆幌缕渌膸灼┛?,在HTTPS分類(lèi)里

十二、參考資料

http://httpd.apache.org/docs/2.4/en/ssl/
http://linux.chinaunix.net/techdoc/net/2008/01/08/976172.shtml
《JAVA加密與解密的藝術(shù)》——作者梁棟   
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
證書(shū)概念以及使用Openssl生成ssl證書(shū)
OpenSSL生成根證書(shū)CA及簽發(fā)子證書(shū)
日記:在A(yíng)pache下配置https的實(shí)例
建立自己的CA,簽發(fā)證書(shū)
那些證書(shū)相關(guān)的玩意兒(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)
IOS證書(shū)申請指南
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久