我们平常写完一个接口,其访问一般都是使用http协议
我们最终想要的结果是使用安全的HTTPS来访问
在我们开始实现之前,我们要先搞明白
HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)都是用于在网络上传输数据的协议,但它们之间存在一些关键的区别:
1、安全性
2、加密方式
3、端口
4、证书
5、身份验证
总体而言,HTTPS相对于HTTP更加安全,适用于需要保护用户隐私和数据完整性的场景,尤其是在进行敏感信息传输(如登录、支付)的时候。大多数现代网站都在使用HTTPS来提供更安全的通信。
域名(Domain Name)是用于标识互联网上资源(如网站、服务器等)的人类可读的文本名称。它的作用主要包括以下几个方面:
方便记忆: IP地址是用于在网络中标识计算机和设备的数字标签,它们通常是一串数字,例如192.168.1.1
。而域名提供了人类友好的方式来标识和记忆网站或服务器,比如www.example.com
。
统一资源定位(URL): 域名通常是网址(URL)的一部分。URL是用于定位和访问互联网上资源的地址,包括协议(例如HTTP或HTTPS)、域名、路径等。例如,https://www.example.com/page
中的www.example.com
就是域名。
提供服务: 域名不仅仅是标识,也与服务和内容关联。当用户在浏览器中输入域名时,系统会通过域名解析将其映射到相应的IP地址,然后连接到相应的服务器,从而获取网站的服务和内容。
品牌建设: 对于企业、组织或个人而言,域名是建立在线品牌和身份的重要组成部分。选择一个有意义、易记且与品牌相关的域名可以提高品牌的可识别性和用户记忆度。
电子邮件: 域名通常也用于电子邮件地址,例如user@example.com
。邮件服务器使用域名来确定邮件的发送和接收地址。
总体而言,域名是互联网上标识和访问资源的一种方便、易记的方式,为用户提供了更友好的访问体验。域名系统(DNS)负责将域名解析为对应的IP地址,使得用户能够通过简单的文本标识来访问互联网上的各种服务和内容。
这里以腾讯云为例,在这里可以购买一个域名
购买完域名之后?就可以点击域名解析,在这里映射你自己的ip地址。需要等待一段时间才会生效。
此时你既可以使用原本的本地localhost进行访问,也可以使用这个域名进行访问,如
有了SSL证书就可以开启HTTPS协议了,同样以腾讯云为例
我们可以申请一个免费的SSL证书
跟着它的步骤一步步来就可以了
?完成以上操作之后,将刚才的证书下载下来,我们是要在后端部署这个证书
因此选择Tomcat(JKS格式)下载
?将下载完的ssl证书放在resources目录下
?
在配置文件中配置如下信息?
server:
port: 8888 #端口配置
ssl: #ssl配置
enabled: true # 默认为true
#key-alias: alias-key # 别名(可以不进行配置)
# 保存SSL证书的秘钥库的路径
key-store: classpath:ssl/an1ong.online.jks
key-password: cb70506mf37q0h
#key-store-password: 证书密码
key-store-type: JKS
这里要把key-store与key-password改了
key-store是你的ssl证书的路径与名字
key-password是你的证书密码,密码在下载完自带的keystorePass.txt里面
这样配置完毕之后再启动服务器,就可以使用安全的https来访问了
这个时候我们启用了https,但是会发现原本http访问就使用不了了
这个时候我们就可以添加以下配置
package com.wal.config;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* https配置,将http请求全部转发到https
* @author Jacob
*/
@Configuration
public class HttpsConfig {
@Value("${custom.http-port: 8889}")
private Integer httpPort;
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(httpPort);
return connector;
}
}
其中
@Value("${custom.http-port: 8889}")
回去配置文件中寻找custom.http-port的配置属性,如果没有找到就是用后面的默认值8889
意思也就是说这个http也占用了一个端口,只不过你访问这个http的时候就会再跳转至https的资源