本篇內(nèi)容介紹了“在Nginx服務(wù)器中怎么使用LibreSSL”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
員工經(jīng)過(guò)長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過(guò)團(tuán)隊(duì)的力量開(kāi)發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)公司堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、電商網(wǎng)站開(kāi)發(fā),重慶小程序開(kāi)發(fā)公司,軟件按需設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
安裝
直接從源碼編譯libressl,構(gòu)建過(guò)程的輸出非常簡(jiǎn)潔,源碼還附帶測(cè)試用例及提供并行構(gòu)建支持(見(jiàn)附錄)。
# 用于構(gòu)建及安裝 libressl 的選項(xiàng) $ ./configure --prefix=/usr ldflags=-lrt && make check && sudo make install
新安裝的 libressl 可替代openssl以相同的方式運(yùn)行,但要注意:正如 sabotage-linux 的 spencerjohn 和 gentoo 的 hanno böck 所說(shuō)的那樣,用libressl完全替代操作系統(tǒng)中的openssl會(huì)很麻煩。[3,4]
libressl 會(huì)報(bào)告其版本為 libressl 2.0, openssl命令的使用方法與openssl一樣:
復(fù)制代碼 代碼如下:
$ which openssl
/usr/bin/openssl
$ openssl version
libressl 2.0
$ openssl s_client -host www.openssl.org -port 443
connected(00000003)
depth=2 c = be, o = globalsign nv-sa, ou = root ca, cn = globalsign root ca
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
certificate chain
0 s:/c=gb/ou=domain control validated/cn=*.openssl.org
i:/c=be/o=globalsign nv-sa/cn=globalsign domain validation ca - g2
1 s:/c=be/o=globalsign nv-sa/ou=root ca/cn=globalsign root ca
i:/c=be/o=globalsign nv-sa/ou=root ca/cn=globalsign root ca
2 s:/c=be/o=globalsign nv-sa/cn=globalsign domain validation ca - g2
i:/c=be/o=globalsign nv-sa/ou=root ca/cn=globalsign root ca
---
server certificate
-----begin certificate-----
... skip
-----end certificate-----
subject=/c=gb/ou=domain control validated/cn=*.openssl.org
issuer=/c=be/o=globalsign nv-sa/cn=globalsign domain validation ca - g2
---
no client certificate ca names sent
---
ssl handshake has read 4136 bytes and written 707 bytes
---
new, tlsv1/sslv3, cipher is dhe-rsa-aes256-gcm-sha384
server public key is 2048 bit
secure renegotiation is supported
compression: none
expansion: none
ssl-session:
protocol : tlsv1.2
cipher : dhe-rsa-aes256-gcm-sha384
tls session ticket lifetime hint: 300 (seconds)
tls session ticket:
確認(rèn)了 libressl 能夠使用后,我便動(dòng)手讓 nginx 來(lái)使用 libressl 。盡管在仍然使用 openssl 0.9.x 的舊系統(tǒng)中,通常我都會(huì)靜態(tài)構(gòu)建 nginx+openssl 以使最新和最好的 tls 版本可用。第一次嘗試,只使用 ./configure --with-openssl=/path/to/libressl 就大錯(cuò)特錯(cuò)了,因?yàn)?nginx 已經(jīng)完全與 openssl 的構(gòu)建過(guò)程融合了:
可使用名為./config的腳本來(lái)替代./configure(容易解決)
openssl 會(huì)收集在 .openssl/lib 下的 objects(.obj) 文件和其他文件來(lái)鏈接進(jìn)二進(jìn)制文件和庫(kù)文件,而 libressl 將這些文件分開(kāi)存放在 crypto/.libs 和 ssl/.libs。
嘗試通過(guò)手工建立目錄層次(.openssl/lib)及根據(jù) libressl 成功構(gòu)建后出現(xiàn)的錯(cuò)誤提示(見(jiàn)下面的錯(cuò)誤信息)來(lái)復(fù)制文件以解決這些問(wèn)題;在編譯 libressl 時(shí),我看到一個(gè)類似可以通過(guò)使用 ldflags=-lrt 選項(xiàng)來(lái)解決問(wèn)題的錯(cuò)誤提示,但在嘗試編譯nginx并鏈接到已靜態(tài)編譯過(guò)的libressl庫(kù)時(shí)仍然無(wú)法修復(fù)這個(gè)問(wèn)題(但我依然繼續(xù)):
復(fù)制代碼 代碼如下:
...
objs/addon/nginx-upstream-fair/ngx_http_upstream_fair_module.o \
objs/addon/src/ngx_http_headers_more_filter_module.o \
objs/addon/src/ngx_http_headers_more_headers_out.o \
objs/addon/src/ngx_http_headers_more_headers_in.o \
objs/addon/src/ngx_http_headers_more_util.o \
objs/addon/src/ngx_http_encrypted_session_module.o \
objs/addon/src/ngx_http_encrypted_session_cipher.o \
objs/ngx_modules.o \
-wl,-e -lpthread -lcrypt -l/usr/lib -lm -llua5.1 -lpcre /data/builds/froggstack/nginx_modules/openssl/.openssl/lib/libssl.a /data/builds/froggstack/nginx_modules/openssl/.openssl/lib/libcrypto.a -ldl -lz
/data/builds/froggstack/nginx_modules/openssl/.openssl/lib/libcrypto.a(libcompat_la-getentropy_linux.o): in function `getentropy_fallback':
/data/builds/froggstack/nginx_modules/openssl/crypto/compat/getentropy_linux.c:324: undefined reference to `clock_gettime'
/data/builds/froggstack/nginx_modules/openssl/crypto/compat/getentropy_linux.c:395: undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status
make[1]: *** [objs/nginx] error 1
make[1]: leaving directory `/data/builds/froggstack/src_nginx/nginx-1.6.0'
make: *** [build] error 2
下一個(gè)嘗試是在安裝了 libressl 的前提下通過(guò)鏈接到 libressl 的動(dòng)態(tài)庫(kù)來(lái)構(gòu)建 nginx,最終成功了(完整的nginx ./configure 選項(xiàng)參數(shù)見(jiàn)附錄)。 運(yùn)行 nginx-libressl -t 測(cè)試成功,并將 /usr/bin/nginx 替換成新的二進(jìn)制可執(zhí)行文件和運(yùn)行 /etc/init.d/nginx restart,更新后的 nginx + libressl 上線了。任何配置文件和 nginx 的 ssl 配置都不需要修改,非常好!
測(cè)試
在各種 linux 和 android 的瀏覽器上測(cè)試都沒(méi)有發(fā)現(xiàn)問(wèn)題;甚至在一臺(tái)已被遺忘的裝有2007年10月發(fā)布并已過(guò)時(shí)的附帶 openssl 0.9.8g 19 的 debian 5 上使用像 w3m 這樣的控制臺(tái)瀏覽器上瀏覽也沒(méi)有問(wèn)題。
在 ssllabs.com 上測(cè)試的得分為 a+,成績(jī)與之前的配置一樣;在使用了 libressl 后,唯一給出的提示是加密算法 chacha20-poly1305 還處于實(shí)驗(yàn)階段。
做了一個(gè)小小的性能測(cè)試,結(jié)果顯示沒(méi)有什么大問(wèn)題;libressl 與平均水平相比慢了 4%。原因可能是 openssl 是靜態(tài)鏈接到 nginx 的,而 libressl 則是動(dòng)態(tài)鏈接到 nginx 的,所以會(huì)產(chǎn)生更多的資源開(kāi)銷。
純數(shù)字的測(cè)試結(jié)果:
復(fù)制代碼 代碼如下:
| parallel requests | openssl-rps | libressl-rps
| 10 | 2341.75 | 2260.5
| 20 | 2459.75 | 2418.25
| 30 | 2472 | 2397
| 40 | 2485 | 2384.5
| 50 | 2445 | 2382.25
| 60 | 2453.25 | 2390.75
| 70 | 2426.25 | 2347.25
| 80 | 2346.5 | 2227.5
| 90 | 2325.5 | 2211
| 100 | 2297.75 | 2318.25
性能測(cè)試方式的一些說(shuō)明可能在附錄中找到。
“在Nginx服務(wù)器中怎么使用LibreSSL”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!