nginx使用ssl模組配置https
阿新 • • 發佈:2018-12-25
前言
由於專案上用到小程式,而現在的小程式非常的嚴格,在開發的時候對接外部介面需要先新增稽核,還得是https協議,而不是htpp協議,對於很多JAVA Web開發人員來說,服務端大多使用時下流行的tomcat(預設是http),並且在虛擬伺服器使用nginx作請求轉發操作。因此,為了實現https訪問伺服器,我們可以配置nginx監聽htpps的預設埠,再進行轉發操作。
http與https
概念
HTTP:是網際網路上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標準(TCP),用於從WWW伺服器傳輸超文字到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少。
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分為兩種:一種是建立一個資訊保安通道,來保證資料傳輸的安全;另一種就是確認網站的真實性。
區別
- https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
- http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
- http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
- http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議的明文傳輸安全。
- http在網路速度上略快於https,https的快取不是很好,開銷比http多
- https在通訊前會有一個證書認證的過程,類似與websocket的第一次握手。
感覺除了安全之外,沒有啥子優勢(安全本身就是一個很大優勢)
生成ssl證書
# 1、首先,進入你想建立證書和私鑰的目錄,例如:
cd /etc/nginx/
# 2、建立伺服器私鑰,命令會讓你輸入一個口令:
openssl genrsa -des3 -out server.key 1024
# 3、建立簽名請求的證書(CSR):
openssl req -new -key server.key -out server.csr
# 4、在載入SSL支援的Nginx並使用上述私鑰時除去必須的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
# 5、最後標記證書使用上述私鑰和CSR:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
nginx編譯ssl模組(可選)
nginx配置ssl
#
# HTTPS server configuration
#
server {
listen 443;
server_name 本機的IP地址;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
location / {
#root html;
#index testssl.html index.html index.htm;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://IP地址/ssl/;
}
}
http轉https
if ($server_port = 80) {
return 301 https://$server_name$request_uri;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
error_page 497 https://$server_name$request_uri;
#或者更直接點
server {
listen 80;
server_name www.xxx.com;
# 跳轉到HTTPS
return 301 https://$server_name$request_uri;
}
#下面是對請求的路徑進行定向
rewrite ^/test(.*)$ http://www.tiyee.net/home permanent;
rewrite指令的最後一項引數為flag標記,支援flag標記有:
1.last 相當於apache裡面的[L]標記,表示rewrite。
2.break本條規則匹配完成後,終止匹配,不再匹配後面的規則。
3.redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址。
4.permanent 返回301永久重定向, 瀏覽器地址會顯示跳轉後的URL地址。
後記
- 使用301強制將https重定向到http在開發中用的非常多,但是我個人認為是不安全的,違背了https的規範。
- 推薦使用轉發操作到http