目錄:
1另假、憑證申請 Let’s Encrypt
2崖叫、Nginx支持多域名ssl證書
3齿尽、Nginx強(qiáng)制使用https訪問(http跳轉(zhuǎn)到https)
4熄守、配置 Tomcat
SSL For Free 免費(fèi) SSL 憑證申請 Let’s Encrypt
什么是Let’s Encrypt
可以看看簡書上的這篇文章寫得比較詳細(xì)《Let's Encrypt SSL證書配置》
文章中詳細(xì)介紹了使用如何手動(dòng)生成SSL證書铸豁。但是我個(gè)人覺得還是比較麻煩灌曙,下面我來介紹一個(gè)簡單的生成SSL證書方案。
使用sslforfree生成Let’s Encrypt證書
配置好Nginx节芥,點(diǎn)擊第5步中的鏈接看看能不能訪問到在刺,如果訪問正常就可以點(diǎn)擊Download SSL Certificate
按鈕下載證書了逆害。
Nginx 主配置nginx.conf
如下:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
server_tokens off;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
include conf.d/*.conf;
}
Nginx web配置web.conf
如下:
upstream tomcat {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /home/dev/logs/nginx/web.access.log main;
# error_page 500 502 503 504 /service/tomcat/nginx/504/504.html;
location /static/{
alias /home/dev/www/;
}
location ~/.well-known/{
add_header Content-Type text/plain;
allow all;
root /home/dev/www/;
}
location / {
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size 20m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 900;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_pass http://tomcat;
}
}
總結(jié)
1、相比較從服務(wù)器中命令行獲取腳本部署方法簡單很多蚣驼,至少這邊可以圖形化操作魄幕,這樣對于一般的用戶不用擔(dān)心是否影響服務(wù)器的安全和穩(wěn)定性。
2颖杏、通過獲取到的Let's Encrypt SSL證書纯陨,我們可以部署到虛擬主機(jī)、VPS留储、服務(wù)器中翼抠,根據(jù)各種需要的WEB環(huán)境自行部署。
3获讳、因?yàn)長et's Encrypt證書90天有效期阴颖,我們在SSL FOR FREE注冊過賬戶,所以到期前會提醒我們丐膝,我們需要根據(jù)提示重新續(xù)約時(shí)間和重新替換證書部署量愧。
Nginx支持多域名ssl證書
要讓nginx支持多證書,nginx必須支持TLS SNI帅矗≠怂啵可以使用如下命令查看
./sbin/nginx -V 或者 /usr/local/nginx/sbin/nginx -V
如果顯示TLS SNI support disabled
可以參考這篇文章進(jìn)行配置
Nginx強(qiáng)制使用https訪問(http跳轉(zhuǎn)到https)
SSL FOR FREE
上下載的證書的zip
包含如下內(nèi)容:
這里我們要將ca_bundle.crt
以及certificate.crt
整合到一個(gè)文件中cert_chain.crt
。
cat certificate.crt ca_bundle.crt >> cert_chain.crt
整合到一個(gè)文件需要手動(dòng)處理一下?lián)Q行浑此,不然啟動(dòng)Nginx會出現(xiàn)"PEM_read_bio:bad end line" 的問題
Nginx 配置SSLhttps.conf
如下:
1累颂、指定域名80端口強(qiáng)制使用https
2、配置https監(jiān)聽
[root@localhost conf]# cat conf.d/https.conf
upstream tomcats {
server 127.0.0.1:8088;
}
server
{
listen 80;
#listen [::]:80;
server_name ngrok.javen205.1mfy.cn static.javen205.1mfy.cn frp.javen205.1mfy.cn ijpay.javen205.1mfy.cn;
return 301 https://$host$request_uri;
#rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443;
server_name ngrok.javen205.1mfy.cn static.javen205.1mfy.cn frp.javen205.1mfy.cn ijpay.javen205.1mfy.cn;
ssl on;
ssl_certificate /usr/local/nginx/conf/ssl/cert_chain.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/private.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
access_log /home/dev/logs/nginx/https.access.log main;
# error_page 500 502 503 504 /service/tomcat/nginx/504/504.html;
location /static/{
alias /home/dev/www/;
}
location ~/.well-known/{
add_header Content-Type text/plain;
allow all;
root /home/dev/www/;
}
location / {
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size 20m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 900;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_pass http://tomcats;
}
}
[root@localhost conf]#
配置Tomcat
配置Tomcat server.xml 的 Engine 模塊下配置一個(gè) Valve:
<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https" httpsServerPort="8088"/> #非80端口時(shí)尤勋,必須增加httpsServerPort配置喘落,不然request.getServerPort()方法返回 443.
</Engine>
在Tomcat的webapps/ROOT
目錄下添加test.html
測試如下圖:
參考資料
Installing a certificate on Nginx
Nginx支持多域名ssl證書
解決配置SSL證書出現(xiàn)"PEM_read_bio:bad end line"問題
Nginx+Tomcat+HTTPS 配置不需要在 Tomcat 上啟用 SSL 支持