1、证书申请入口
官方文档:https://help.aliyun.com/document_detail/205510.html?spm=a2c4g.11186623.6.689.3ba27af35DlcUV
- 购买及创建证书
- 点击证书申请,填写申请信息
- 申请后效果
- 下载证书到本地,我们是spring-boot项目,所以下载tomcat证书
- 下载到的证书
2、服务器配置
服务器要使用ssl证书,需要安装OpenSSL
- 下载OpenSSL
地址:https://www.openssl.org/source/
目前官方支持的最稳定的是1.1.1版本,并且会一直支持到2023年,2.0版本是支持FIPS认证的一个版本,但是不会再更新,3.0是下一代主要版本,并且支持FIPS协议,但是现在不稳定,所以现在用1.1.1版本。 - 环境准备
安装需要gcc的运行环境,没有gcc环境可以 yum -y install gcc 安装 - 下载到Linux服务器并安装
#下载
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
#解压
tar -xzf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
#配置安装路径并安装
./config --prefix=/usr/local/openssl
./config -t
make
- 安装成功
3、项目配置
- 检查项目tomcat版本
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
去这个依赖下找一下tomcat的版本,点进去,再properties节点下看到Tomcat的版本
<tomcat.version>9.0.13</tomcat.version>
注意:Tomcat 9强制要求证书别名设置为tomcat()
Tomcat 9强制要求证书别名设置为tomcat。您需要使用以下keytool命令将protocol="HTTP/1.1"转换成protocol=“org.apache.coyote.http11.Http11NioProtocol”。
证书文件夹下,打开控制台,运行下面的命令:
keytool -changealias -keystore 你的证书名字.pfx -alias alias -destalias tomcat
- application.yml 文件修改
https:
port: 安全链接访问端口 例如 443
ssl:
key-store: classpath:你的证书文件名字(证书放在resources目录下) 例如 key.pfx
key-store-password: 你的密码
key-store-type: 证书类型 例如 PKCS12
阿里云的证书默认为PKCS12 ,需要转换可以阅读阿里云的文档:https://help.aliyun.com/document_detail/98576.html?spm=a2c4g.11186623.6.628.55b465fc0tv1xB
注意:这里我没有直接使用server节点下配置,而是另起一个https配置节点,是为了让项目可以通过http访问,http访问的地址为server.port对应的端口
- 在项目启动类中加入配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
@Value("${https.port}")
private Integer port;
@Value("${https.ssl.key-store}")
private String key_store;
@Value("${https.ssl.key-store-password}")
private String key_store_password;
@Value("${https.ssl.key-store-type}")
private String key_store_type;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("启动成功");
}
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createSslConnector()); // 添加http
return tomcat;
}
private Connector createSslConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("https");
connector.setSecure(true);
connector.setPort(port);
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
protocol.setSSLEnabled(true);
protocol.setKeystoreFile(key_store);
protocol.setKeystorePass(key_store_password);
protocol.setKeystoreType(key_store_type);
return connector;
}
}
最后,将启动项目,没有报错就可以打包发布了,效果如下: