springboot配合nginx 设置ssl证书、实现https的访问

你好,朋友

我们在一些网站上生成一个证书压缩包如下,适用于4种应用服务器下的ssl配置。分别为 apache、iis、nginx、tomcat


image.png

我们先来看如何在springboot中配置ssl证书,达到https访问的目的

我们知道springboot工程里面有内嵌tomcat,那就是要选择tomcat目录下的证书了。

选择tomcat文件夹内的xxx.jks 文件,将之复制到工程的


image.png

resources文件夹根目录下,即是classpath下


image.png

将之配置到yml下

注意这个 key-store-password即是tomcat文件夹内的keystorePass.txt中的内容;key-store指定jks文件的路径。

server:
  port: 8080
  ssl:
    key-store: classpath:xxx.jks
    key-store-password: 123456

重启项目报这个错,估计这个xxx.jks文件没有被编译打包到输出文件夹:

Caused by: java.io.IOException: Invalid keystore format

解决:maven中添加 <filtering>false</filtering>

<build>
        <resources>
            <resource>
                <filtering>false</filtering>
            </resource>
        </resources>
    
    </build>

但是加了这个之后虽然支持https了,mybatis又报mapper.xml找不到的错误。。

所以只有一个两全其美的方式才行,为了能够将配置文件一并打包到工程的jar包中,就需要加入下面配置:

    <resources>
            <resource>
                <directory>src/main/java</directory>
                <!-- 此配置不可缺,否则mybatis的Mapper.xml将会丢失 -->
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--指定资源的位置-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.**</include>

                </includes>
            </resource>
            <resource>
                <directory>src/main/webapp</directory>
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>

而且现在前端的websocket 也报错了

was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://111.231.198.149:8080//websocket/e9ca23d68d884d4ebb19d07889727dae'. This request has been blocked; this endpoint must be available over WSS.

这个问题先放下,有时间再来看看

image.png

配置完毕后部署到服务器,启动工程后访问如下:这样就能够通过https访问springboot工程了。不过不知道为什么这里的https图标不是绿色而是灰色的。


image.png

ngnix实现https,并代理springboot的请求、将http请求转为https

首先,先使用docker-compose.yml部署ngnix
version: "2"
services:
  https-nginx-server:
    image: nginx
    container_name: "https-nginx-server"
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./conf.d:/etc/nginx/conf.d
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - ./conf/xxx.crt:/etc/nginx/xxx.crt
      - ./conf/xxx.key:/etc/nginx/xxx.key
      - ./log:/var/log/nginx
      - ./www:/var/www
      - /etc/letsencrypt:/etc/letsencrypt

    network_mode: 'host'
    restart: always

conf文件夹下的文件如下 ,包含证书文件xxx.crt、秘钥文件 xxx.key、nginx.conf


image.png
nginx.conf文件
worker_processes  1;
events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;


    # HTTPS server
    server {
        listen 443 ssl http2;
        server_name  xxx;
        ssl_certificate xxx.crt;
        ssl_certificate_key xxx.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        server_tokens off;
        fastcgi_param   HTTPS               on;
        fastcgi_param   HTTP_SCHEME         https;
        location / {
            proxy_pass https://xxx:8080/; #代理转发的路径
            proxy_redirect default;
            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_set_header X-Forwarded-Proto https;
            error_page 502 = /500.html;
        }

    }

   server {
        listen       80;
        server_name  xxx;#访问的路径
        return 301 https://$host$1;
    }

}

打开证书压缩包内的ngnix文件夹:可以看到一个 crt和一个key文件。将之复制到/conf下


image.png

nginx中有配置两个server节点,一个监听443端口,一个监听80端口;443端口的server配置上证书和秘钥,并使用proxy_pass 代理到我们的springboot工程路径https://xxx:8080/下;80端口的server直接将请求重定向到https上,实现http转https。

注意点1: proxy_pass https://xxx:8080/; 表示将https://xxx的请求代理至 https://xxx:8080/ 这里(这个路径即是上面的springboot工程的请求路径,而且这种代理 类似于咱们javaweb下的服务器请求转发 ,意味着地址栏不会发生改变)

注意点2: return 301 https://$host$1; 表示将http://xxx的请求重定向到上面配置的https://xxx,实现http转https(这种功能还可以使用rewrit实现,类似于javaweb中的浏览器重定向。地址栏会变为目标地址)

配置完毕后,启动ngnix。如下,终于可以直接使用域名,不加8080端口来访问咱们的springboot工程了。而且这里的https图片是绿色的,虽然不知道是什么意思。绿色总比之前的灰色好吧?


image.png
下面说一些注意事项

刚刚配置好了就是不能使用https访问,https请求总是阻塞很久然后失败。看看是不是端口没有开放出来。

1、我这里使用腾讯云服务器,必须先到腾讯云上将 443、80、8080端口打开;443是https的默认端口、80是http的默认端口、8080则是springboot工程的端口

2、如果仍然不能使用https访问,试下手动开启443端口,重启防火墙(我就是使用这个方式解决的~)

firewall-cmd --zone=public --add-port=443/tcp --permanent 
success
firewall-cmd --reload
success
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容