|
為了互聯(lián)網(wǎng)安全HTTS化勢(shì)在必行,但是證書(shū)首先需要花錢(qián)購(gòu)買(mǎi),雖然有很多免費(fèi)證書(shū)可以申請(qǐng),但而且還必須要有個(gè)域名才能通過(guò)驗(yàn)證。實(shí)際中我們有一些內(nèi)部的系統(tǒng)或者某些測(cè)試環(huán)境沒(méi)有域名或者無(wú)需設(shè)置域名,這種情況下如何使用HTTPS呢,那就是本文蟲(chóng)蟲(chóng)要給大家介紹的自簽名證書(shū)方式。 安裝升級(jí)openSSLOpenSSL是整個(gè)底層加密算法庫(kù)和工具的基礎(chǔ)。 我們的Web服務(wù)器要依賴(lài)它的類(lèi)庫(kù)來(lái)實(shí)現(xiàn)SSL/TSL模塊和HTTPS的工作。在簽發(fā)證書(shū)時(shí)候也需要使用OpenSSL。在自簽名生成時(shí)候,我們可以使用其他更加專(zhuān)業(yè)的軟件,比如GPG,關(guān)于GPG使用我們以前文章中介紹過(guò),大家可以參考?xì)v史文章。本文為了方便,證書(shū)的簽發(fā)都用OpenSSL。 由于OpenSSL升級(jí)可能影響很多軟件,我們先不直接升級(jí),而生成一個(gè)新版本的OpenSSL在/usr/local/ssl目錄,這樣不影響已有有版本的其他軟件。 首先下載最新版本的OpenSSL,為了兼容我們選擇1.0.2系列版本: wget Url --no-check-certificate tar -zxvf openssl-*.tar.gz cd openssl-* ./config -fpic shared && make && make install echo '/usr/local/ssl/lib' >> /etc/ld.so.conf ldconfig 生成自簽名證書(shū)子簽名證書(shū)的使用商用證書(shū)一樣,不過(guò)證書(shū)需要自己生成。首先確保OpenSSL升級(jí)到新版本,或者通過(guò)yum update openssl升級(jí)確保解決已有的ssl漏洞。 mkdir /etc/ssl chmod 700 /etc/ssl /usr/local/openssl/bin/openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/rsa_private.key -x509 -days 888 -out cert.crt -subj /C=CN/ST=BJ/L=CY/O=CC/OU=OP/CN=Chongchong/emailAddress=test@cc.info 為了避免創(chuàng)建證書(shū)過(guò)程中的交互式信息填寫(xiě),我們此處使用-subj參數(shù)指定了一些參數(shù),實(shí)際使用中可以根據(jù)需要自己設(shè)置: C=CN ← 國(guó)家代號(hào),中國(guó)輸入CN ST=BJ ← 州(?。┟?/p> L=CY ← 所在地市的名稱(chēng) O=CC ← 組織或者公司名稱(chēng) OU=OP ← 部門(mén)名稱(chēng) CN=Chongchong ← 通用名,可以是服務(wù)器域控名稱(chēng),或者個(gè)人的名字 emailAddress=test@cc.info ← 管理郵箱名 會(huì)生成網(wǎng)站私鑰rsa_private.key和網(wǎng)站證書(shū)cert.crt都準(zhǔn)備完畢。證書(shū)的驗(yàn)證可以在設(shè)置成功后。為了證書(shū)安全設(shè)置權(quán)限: chmod 600 /etc/ssl/* Nginx HTTPS安全配置確保nginx使用最新版本的nginx(目前版本為1.15.11,1.12.2),如果系統(tǒng)是用的其他應(yīng)用服務(wù)器,一般做法是給新增加nginx做為反向代理,代理到應(yīng)用服務(wù)器,比如tomcat,然后在Nginx反向代理商配置https。 新開(kāi)一個(gè)虛擬主機(jī),并在server{ .. . }段中設(shè)置: 注意nginx新語(yǔ)法中已經(jīng)不使用ssl on;而是在listen語(yǔ)句中添加ssl;443為默認(rèn)https端口,根據(jù)實(shí)際情況修改為別的。 listen *:443 ssl; ssl_certificate / etc/ssl/cert.crt; ssl_certificate_key / etc/ssl/rsa_private.key; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload'; 其中的路徑是剛剛生成的網(wǎng)站證書(shū)的路徑。根據(jù)網(wǎng)站實(shí)際情況配置可能有差異,我們可以使用Mozilla的服務(wù)器端TLS配置在線(xiàn)生成器,這個(gè)我們以前的文章中也提到過(guò): 配置完成后,使用nginx命令檢測(cè)配置和重新加載Nginx: 檢測(cè)配置: nginx -t 重新加載: nginx -s reload Nginx優(yōu)化配置優(yōu)化Nginx性能在http{.. .}中加入: ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; 增加session緩存可以提高nginx處理https的性能。 在配置https的虛擬主機(jī)server{.. .}中加入: keepalive_timeout 70; 設(shè)置超時(shí),可以由于超時(shí)導(dǎo)致等待導(dǎo)致性能問(wèn)題 fastcgi ssl配置有時(shí)候啟用https后,有些php程序認(rèn)證通過(guò)后,出現(xiàn)跳轉(zhuǎn)頁(yè)面錯(cuò)誤錯(cuò)誤,跳轉(zhuǎn)到http導(dǎo)致問(wèn)題。 解決方法是定位至'location ~ .*\.(php|php5)?${}'在include fcgi.conf;或者在fastcgi_param配置后面加上: fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; 瀏覽器添加網(wǎng)站信任使用自簽名的https證書(shū),默認(rèn)瀏覽器是拒絕訪(fǎng)問(wèn)的,需要把該網(wǎng)站添加到瀏覽器信任列表才能訪(fǎng)問(wèn)。 添加信任的方法: firefox點(diǎn)擊高級(jí),將要訪(fǎng)問(wèn)url添加到信任即可: ChromeChrome設(shè)置類(lèi)似,點(diǎn)擊高級(jí) 點(diǎn)擊繼續(xù)前往 證書(shū)驗(yàn)證查看我們自簽名的證書(shū)信息: 和第二部我們生成證書(shū)時(shí)候設(shè)置的參數(shù)一致。 |
|
|