生成证书使用Java的Keytool生成证书
$ which keytool /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin/keytool $ keytool 密钥和证书管理工具 命令: -certreq 生成证书请求 -changealias 更改条目的别名 -delete 删除条目 -exportcert 导出证书 -genkeypair 生成密钥对 -genseckey 生成密钥 -gencert 根据证书请求生成证书 -importcert 导入证书或证书链 -importpass 导入口令 -importkeystore 从其他密钥库导入一个或所有条目 -keypasswd 更改条目的密钥口令 -list 列出密钥库中的条目 -printcert 打印证书内容 -printcertreq 打印证书请求的内容 -printcrl 打印 CRL 文件的内容 -storepasswd 更改密钥库的存储口令
使用 “keytool -command_name -help” 获取 command_name 的用法
输入
keytool -genkey -storetype PKCS12 -keysize 2048 -alias tomcat -keyalg RSA -keystore ./tomcat.keystore
结果如下
输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: chen 您的组织单位名称是什么? [Unknown]: scut 您的组织名称是什么? [Unknown]: scut 您所在的城市或区域名称是什么? [Unknown]: guangzhou 您所在的省/市/自治区名称是什么? [Unknown]: guangzhou 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=chen, OU=scut, O=scut, L=guangzhou, ST=guangzhou, C=CN是否正确? [否]: 是
得到了tomcat.keystore之后将证书放置到项目根目录配置HTTPS在spring-boot项目的application.properties配置文件下增加配置如下
server.port=8843 server.ssl.key-store=tomcat.keystore server.ssl.key-store-password=server.ssl.key-store-type=PKCS12 server.ssl.key-alias=tomcat
其中是在生成证书的时候设置的口令定义HTTPS的配置类
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.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpsConfiguration {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(6161);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(8843);
return connector;
}
}
本人在配置该HTTPS的时候使用的spring版本信息为2.1.3.RELEASE
之后访问资源的时候可以通过https://host:8843/来访问,如果访问方式为http://host:6161/会跳转到HTTPS端口。



