web前后端 http转https-程序员宅基地

技术标签: spring boot  http  https  

1.转换前准备

http转https需要一个证书、本文已ssl证书举例,只有认证的证书才能被认可。阿里云可以申请免费的证书, 但是生成证书需要域名。且域名要绑定ip。故ssl申请前需要域名。可上阿里云购买

证书申请教程:证书申请

绑定ip:如果没有服务器、也可以用本地ip代替。

 

2.后端spring boot http 转 https

1) 下载对应tomcat证书

2) 将证书移动到spring boot 中的resources文件夹下、配置application.yml或application.properties

application.properties:

#https 端口
server.port: 7001 
#http端口
server.http.port: 7000
# 用的是公司的证书 此处不再提供,请替换成自己的证书
server.ssl.key-store: classpath:xx.pfx
server.ssl.key-store-password: 96XP9E9F
server.ssl.keyStoreType: PKCS12

application.yml

server:
  port: 9004
  http:
    port: 9003
  ssl:
    key-store: classpath:XX.pfx
    key-store-type: PKCS12
    enabled: true
    #密码
    key-store-password: j0B2b291Dd

3) http的端口自动跳转到https端口

HttpsConfig.java


import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * HTTP自动转向HTTPS的配置
 *
 */
@Component
public class HttpsConfig {
    /**
     *  http的端口
     */
    @Value("${server.http.port}")
    private int httpPort;

    /**
     * https的端口
     */
    @Value("${server.port}")
    private int httpsPort;
    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection securityCollection = new SecurityCollection();
                securityCollection.addPattern("/*");
                securityConstraint.addCollection(securityCollection);
                context.addConstraint(securityConstraint);
            }
        };
        factory.addAdditionalTomcatConnectors(httpConnector());
        return factory;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(httpPort);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(httpsPort);
        return connector;
    }
}

报红是因为当前的域名所对应的ip和服务器ip不一致所致, 将域名对应的IP和服务器ip对应即可解决问题。可通过ping 域名查询域名所对应的地址。

 3.nginx 配置http转https(docker)

nginx.conf


user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
	
	
	server { 
        listen       80;    
        server_name www.aaa.bbb.fun;
 rewrite ^(.*)$ https://${server_name}$1 permanent;
	}
	server {
        listen       443 ssl;
         server_name www.aaa.bbb.fun;
 		 ssl_certificate /ssl/6431157_aaa.bbb.fun.pem;
        ssl_certificate_key /ssl/6431157_aaa.bbb.fun.key;
        ssl_session_cache           shared:SSL:10m;
        ssl_session_timeout         5m;
        ssl_protocols               SSLv3 TLSv1.1 TLSv1.2;
        ssl_ciphers                 HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
        ssl_prefer_server_ciphers   on;
        location / {
                proxy_set_header            Host $host;  
            proxy_set_header            X-real-ip $remote_addr;  
            proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;  
            root /usr/share/nginx/html;
            index  index.html index.htm;
			add_header Access-Control-Allow-Origin *;
        }
		  error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


		
    }
}

dokcer运行:

#运行容器
docker run -d  -p 30014:443  --name jsjmh-web -v ~/nginx/jsj/dist:/usr/share/nginx/html -v ~/nginx/jsj/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/jsj/logs:/var/log/nginx -v  ~/nginx/jsj/ssl:/ssl  nginx

#运行说明
-v ~/nginx/jsj/dist:/usr/share/nginx/html 静态页面挂载
-v ~/nginx/jsj/conf/nginx.conf:/etc/nginx/nginx.conf 配置文件挂载
-v ~/nginx/jsj/logs:/var/log/nginx 日志挂载
-v  ~/nginx/jsj/ssl:/ssl ssl证书挂载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42702229/article/details/120914646

智能推荐

产品入库的PV操作-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏19次。在一个仓库中可以存放A和B两种产品,要求: 1)每次只能存入一种–互斥访问 2)A产品数量 - B产品数量 < M 3)B产品数量 - A产品数量 < N其中,M,N是正整数,使用PV操作描述A和B的入库过程。semaphore mutex = 1;int countA = 0,countB = 0;PA:while(1){ if(countA - countB < M -

dicom格式是什么(Dicom文件是什么)-程序员宅基地

文章浏览阅读320次。关于Dicom和Dicom RT的相关资料DICOM介绍DICOM即数字影像和通信标准。在医学影像信息学的发展和PACS的研究过程中,由于医疗设备生产厂商的不同,造成与各种设备有关的医学图像存储格式、传输方式千差万别,使得医学影像及其相关信息在不同系统、不同应用之间的交换受到严重阻碍。为此,美国放射学会(ACR)和..._dicom格式是什么

python tkinter(二) 下拉框(combobox)组件的属性说明及示例_tkinter下拉框-程序员宅基地

文章浏览阅读5.1w次,点赞63次,收藏264次。Python tkinter 下拉框(combobox)组件用于tkinter GUI里添加下拉框,下拉框可以添加文本和设置默认选项。当选中下拉框时,可以返回指定的值,通过不同的值,执行不同的函数。使用语法:self.drop_down_box = ttk.Combobox(master)master:按钮控件的父容器参数说明:value 插入下拉选项 .curren..._tkinter下拉框

android手机病毒原理,安卓手机病毒的原理是什么-程序员宅基地

文章浏览阅读1.8k次。安卓手机病毒的原理是什么Android系统因其开源性而受到了众多手机厂商和用户的倾爱,因为开源,所以降低了手机厂商的使用成本,也能让更多的开发者加入Android应用 的开发行列。下面是jy135小编收集整理的安卓手机病毒的原理是什么,欢迎阅读。病毒”原理Android系统因其开源性而受到了众多手机厂商和用户的倾爱,因为开源,所以降低了手机厂商的使用成本,也能让更多的开发者加入Android应用 ...

python画生肖兔_python画兔子代码-程序员宅基地

文章浏览阅读2.1k次。python画生肖兔_python画兔子代码

【转载】电脑店超级U盘装系统-设置U盘启动_电脑店u盘装系统有捆绑吗-程序员宅基地

文章浏览阅读1.5k次。电脑店超级U盘装系统-设置U盘启动(V5.0 UD+ISO二合一版 )2012-11-30 21:02 点击进入电脑店超级U盘装系统-程序下载和运行(V5.0 UD+ISO二合一版 ) 点击进入电脑店超级U盘装系统-个性化设置和升级安装(V5.0 UD+ISO二合一版 ) 点击进入电脑店超级U盘装系统-设置U盘启动(V5.0 UD_电脑店u盘装系统有捆绑吗

随便推点

Nginx网络服务-程序员宅基地

文章浏览阅读788次,点赞9次,收藏28次。先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包HTTP_STUB_STATUS 模块,cat /opt/nginx-1.12.0/auto/options | grep YES #查看nginx已安装的所有模块。在Linux平台.上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

数据流图——从软考真题中学画数据流图DFD_招聘考试成绩管理数据流程图-程序员宅基地

文章浏览阅读2.7w次,点赞211次,收藏852次。某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下:  1. 每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程结束后进行期末考试,其成绩作为这门课程的考试成绩。  2. 学生的平时成绩和考试成绩均由每门课程的主讲教师上传给成绩管理系统。  3. 在记录学生成绩之前,系统需要验证这些成绩是否有效。首先..._招聘考试成绩管理数据流程图

oracle 除法 余数,oracle基本操作符/运算符/操作语言..-程序员宅基地

文章浏览阅读1.9k次。算术操作符:无论是在sqlserver,或者是java中,每种语言它都有算术操作符,大同小异。Oracle中算术操作符(+)(-)(*)(/)值得注意的是:/在oracle中就相当于显示中的除法5/2= 2.5比较操作符:其中等号可以换成其他运算符:(后面为该操作符的单条件查询样例)!=不等于selectempno,ename,jobfromscott.empwherejob!..._oracl除后剩余数

ibm邮箱连接不到服务器,IBM i 安全邮件配置和常见故障排除方法-程序员宅基地

文章浏览阅读2.8k次。BodyIBM i安全邮件配置和常见故障排除方法简介:电子邮件是现在普遍使用的一种通信方式,为了提高通信过程中的安全并且保护邮件内容不被泄露,IBM i SMTP增加了对TLS的支持, 通过此技术保障了邮件通信过程中的安全和数据的不被篡改。本文提供了IBM i V7R2及以上版本安全邮件的配置方法和常见故障排除方法。术语缩写:SMTP:Simple Mail Transfer ProtocolTL..._邮件dcm

VLAN(虚拟局域网)_2019vlan-程序员宅基地

文章浏览阅读402次。创建VLAN的指令:VLAN +ID号(取值范围1-4094,1是默认存在)用来连接终端设备的(pc,打印机,监控摄像头)片面认为,access接口下面接的一定是终端。交换网络本身的工作原理是什么?交换机是基于MAC地址表转发的。hybrid(华为特有)_2019vlan

静态手势识别总体方案_手势识别有哪些方案-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏44次。静态手势识别总体方案0.说明1.实现目标2.实现步骤1)总体思路2)每部分效果基于高斯肤色模型和动态阈值的手势分割基于Canny算法的轮廓提取基于Hu矩的量化基于傅里叶描述子的量化分类融合特征分类其他尝试0.说明静态手势识别是2019年四五月份做的一次设计,实验平台是Matlab。主要针对静态手势,采用肤色模型分离手部区域,提取手势的轮廓信息,采用不同的描述方式进行量化,最后采用BP神经网络和..._手势识别有哪些方案