隨著我們網(wǎng)站用戶的增多,我們會逐漸意識到HTTPS加密的重要性。在不修改現(xiàn)有代碼的情況下,要從HTTP升級到HTTPS,讓Nginx支持HTTPS是個很好的選擇。今天我們來講下如何從Nginx入手,從HTTP升級到HTTPS,同時(shí)支持靜態(tài)網(wǎng)站和SpringBoot應(yīng)用,希望對大家有所幫助!
生成SSL自簽名證書
雖然自簽名證書瀏覽器認(rèn)為并不是安全的,但是學(xué)習(xí)下SSL證書的生成還是很有必要的!?
- 首先創(chuàng)建SSL證書私鑰,期間需要輸入兩次用戶名和密碼,生成文件為
blog.key
;openssl genrsa -des3 -out blog.key 2048
- 利用私鑰生成一個不需要輸入密碼的密鑰文件,生成文件為
blog_nopass.key
;openssl rsa -in blog.key -out blog_nopass.key
- 創(chuàng)建SSL證書簽名請求文件,生成SSL證書時(shí)需要使用到,生成文件為
blog.csr
;openssl req -new -key blog.key -out blog.csr
- 在生成過程中,我們需要輸入一些信息,需要注意的是
Common Name
需要和網(wǎng)站域名一致;Enter pass phrase for blog.key: ----- Country Name (2 letter code) [XX]:CN # 國家代碼 State or Province Name (full name) []:jiangsu # 省份 Locality Name (eg, city) [Default City]:jiangsu # 城市 Organization Name (eg, company) [Default Company Ltd]:macrozheng # 機(jī)構(gòu)名稱 Organizational Unit Name (eg, section) []:dev # 單位名稱 Common Name (eg, your name or your server's hostname) []:blog.macrozheng.com # 網(wǎng)站域名 Email Address []:macrozheng@qq.com # 郵箱 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: # 私鑰保護(hù)密碼,可以不輸入直接回車 An optional company name []: # 可選公司名稱,可以不輸入直接回車
- 生成SSL證書,有效期為365天,生成文件為
blog.crt
;openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt
- 其實(shí)最終有用的文件是兩個,一個是證書文件
blog.crt
,另一個是不需要輸入密碼的證書私鑰文件blog_nopass.key
。
Nginx支持HTTPS
SSL證書生成好了,接下來我們就可以配置Nginx來支持HTTPS了!
安裝Nginx
- 我們還是使用在Docker容器中安裝Nginx的方式,先下載Nginx的Docker鏡像;
docker pull nginx:1.10
- 下載完成后先運(yùn)行一次Nginx,由于之后我們要把宿主機(jī)的Nginx配置文件映射到Docker容器中去,運(yùn)行一次方便我們拷貝默認(rèn)配置;
docker run -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -d nginx:1.10
-
運(yùn)行成功后將容器中的Nginx配置目錄拷貝到宿主機(jī)上去;
docker container cp nginx:/etc/nginx /mydata/nginx/
-
將宿主機(jī)上的
nginx
目錄改名為conf
,要不然/mydata/nginx/nginx
這個配置文件目錄看著有點(diǎn)別扭;mv /mydata/nginx/nginx /mydata/nginx/conf
-
創(chuàng)建的Nginx容器復(fù)制完配置后就沒用了,停止并刪除容器;
docker stop nginx docker rm nginx
-
使用Docker命令重新啟動Nginx服務(wù),需要映射好配置文件,由于我們要支持HTTPS,還需要開放
443
端口docker run -p 80:80 -p 443:443 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -v /mydata/nginx/conf:/etc/nginx \ -d nginx:1.10
?文章來源地址http://www.zghlxwxcb.cn/news/detail-676222.html
配置支持HTTPS
- 將我們生成好的SSL證書和私鑰拷貝到Nginx的
html/ssl
目錄下;cp blog_nopass.key /mydata/nginx/html/ssl/ cp blog.crt /mydata/nginx/html/ssl/
- 接下來我們需要給
blog.macrozheng.com
這個域名添加HTTPS支持,在/mydata/nginx/conf/conf.d/
目錄下添加Nginx配置文件blog.conf
,配置文件內(nèi)容如下;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置SSL加密算法 ssl_prefer_server_ciphers on; # 優(yōu)先采取服務(wù)器算法 ssl_session_cache shared:SSL:10m; # 配置共享會話緩存大小 ssl_session_timeout 10m; # 配置會話超時(shí)時(shí)間 location / { root /usr/share/nginx/html/www; index index.html index.htm; } location /admin { alias /usr/share/nginx/html/admin; index index.html index.htm; } location /app { alias /usr/share/nginx/html/app; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
- 通過
HTTPS
訪問blog.macrozheng.com
這個域名,由于我們使用的是自己簽名的SSL證書,瀏覽器會提示您的連接不是私密連接
,點(diǎn)擊繼續(xù)前往可以通過HTTPS正常訪問; - 我們可以查看下證書的
頒發(fā)者
信息,可以發(fā)現(xiàn)正好是之前我們創(chuàng)建SSL證書簽名請求文件時(shí)錄入的信息; - 接下來我們需要給
api.macrozheng.com
這個域名添加HTTPS支持,通過這個域名可以使用HTTPS訪問我們的SpringBoot應(yīng)用,api.crt
和api_nopass.key
文件需要自行生成,在/mydata/nginx/conf/conf.d/
目錄下添加Nginx配置文件api.conf
,配置文件內(nèi)容如下;server { listen 80; # 同時(shí)支持HTTP listen 443 ssl; # 添加HTTPS支持 server_name api.macrozheng.com; #修改域名 #ssl配置 ssl_certificate /usr/share/nginx/html/ssl/api/api.crt; # 配置證書 ssl_certificate_key /usr/share/nginx/html/ssl/api/api_nopass.key; # 配置證書私鑰 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 配置SSL協(xié)議版本 # 配置SSL加密算法 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; # 優(yōu)先采取服務(wù)器算法 ssl_session_cache shared:SSL:10m; # 配置共享會話緩存大小 ssl_session_timeout 10m; # 配置會話超時(shí)時(shí)間 location / { proxy_pass http://192.168.3.101:8080; # 設(shè)置代理服務(wù)訪問地址 proxy_set_header Host $http_host; # 設(shè)置客戶端真實(shí)的域名(包括端口號) proxy_set_header X-Real-IP $remote_addr; # 設(shè)置客戶端真實(shí)IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 設(shè)置在多層代理時(shí)會包含真實(shí)客戶端及中間每個代理服務(wù)器的IP proxy_set_header X-Forwarded-Proto $scheme; # 設(shè)置客戶端真實(shí)的協(xié)議(http還是https) index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
- 通過
HTTPS
訪問api.macrozheng.com
這個域名,訪問地址為:https://api.xx.com/sw... - 任意調(diào)用一個接口測試下,比如說登錄接口,可以發(fā)現(xiàn)已經(jīng)可以通過HTTPS正常訪問SpringBoot應(yīng)用提供的接口。
?文章來源:http://www.zghlxwxcb.cn/news/detail-676222.html
使用受信任的證書
之前我們使用的是自簽名的SSL證書,對于瀏覽器來說是無效的。使用權(quán)威機(jī)構(gòu)頒發(fā)的SSL證書瀏覽器才會認(rèn)為是有效的,這里給大家推薦兩種申請免費(fèi)SSL證書的方法,一種是從阿里云申請,另一種是從FreeSSL申請。
阿里云證書
- 阿里云上可以申請的免費(fèi)證書目前只有支持單個域名的DV級SSL證書。比如說你有
blog.macrozheng.com
和api.macrozheng.com
兩個二級域名需要使用HTTPS,就需要申請兩個SSL證書。 - 申請成功后點(diǎn)擊下載Nginx證書即可;
- 下載完成后解壓會有下面兩個文件;
blog.macrozheng.com.key # 證書私鑰文件 blog.macrozheng.com.pem # 證書文件
- 拷貝證書文件到Nginx的指定目錄下,然后修改配置文件
blog.conf
,只要修改證書配置路徑即可,修改完成后重啟Nginx;#SSL配置 ssl_certificate /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.pem; # 配置證書 ssl_certificate_key /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.key; # 配置證書私鑰
- 再次通過HTTPS訪問
blog.macrozheng.com
這個域名,發(fā)現(xiàn)證書已經(jīng)有效了,連接也是安全的了。
FreeSSL證書
- 如果你有使用通配符域名的需求,可以上
FreeSSL
申請SSL證書,不過免費(fèi)的有效期只有3個月,這就意味著你過3個月就要重新申請一次了。附上官網(wǎng)地址:https://freessl.cn/
?
使用acme.sh自動申請證書
-
acme.sh
腳本實(shí)現(xiàn)了acme
協(xié)議, 可以從letsencrypt
生成免費(fèi)的證書。一般我們申請的證書有效期都是1年,過期就要重新申請了,使用acme.sh
腳本可以實(shí)現(xiàn)到期自動申請,再也不用擔(dān)心證書過期了! - https://github.com/acmesh-official/acme.sh?? 官網(wǎng)地址
?
?
?
?
?
到了這里,關(guān)于網(wǎng)站和API支持HTTPS,最好在Nginx上配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!