springboot使用JDK自带工具keytool生成ssl证书

转载:
https://blog.csdn.net/dwyane__wade/article/details/80350548
参考文档:
https://blog.csdn.net/p793049488/article/details/53422195

补充如下内容:

步骤五:证书安装
安装方式一:
双击server.cer文件,按照提示安装证书
将证书填入到“受信任的根证书颁发机构”。具体方法:(我用的谷歌浏览器):

  • 打开谷歌浏览器 --> 设置–> 高级 --> 管理证书 --> 中级证书颁发机构 --> 选择www.seeker.com,点击导出到桌面SEEKER.cer
  • 打开谷歌浏览器 --> 设置–> 高级 --> 管理证书 --> 受信任的根证书颁发机构 --> 导入SEEKER.cer

其他浏览器将证书填入到“受信任的根证书颁发机构”:

  • 打开浏览器 - 工具 - internet选项-内容- 证书-把中级证书颁发机构里的www.seeker.com(该名称即时你前面生成证书时填写的名字与姓氏)证书导出来-再把导出来的证书导入 受信任的根颁发机构 就OK了。
    以上安装证书只是导入了服务端,在启动tomcat服务访问有问题,请参考《安装方式二》将客户端证书导入。

安装方式二:
点击客户端证书client.p12 直接安装或者导入即可,导入过程中需要输入密码,该密码是使用命令行生成证书时输入的密码。
IE:设置》内容》证书》个人》导入证书即可。
springboot使用JDK自带工具keytool生成ssl证书_第1张图片

Google: 安装及查看证书,设置-》高级-》安装证书-》双击该选项-》个人选项》导入证书即可。
springboot使用JDK自带工具keytool生成ssl证书_第2张图片
360: 设置-》安全设置-》https证书管理-》个人》导入证书即可。
springboot使用JDK自带工具keytool生成ssl证书_第3张图片

火狐:设置》高级》证书》查看证书》个人》导入证书即可。
springboot使用JDK自带工具keytool生成ssl证书_第4张图片
证书安装完成后,配置tomcat服务,通过启动tomcat服务后就可以使用了。

导入详细过程:
springboot使用JDK自带工具keytool生成ssl证书_第5张图片

选择当前用户即可。
springboot使用JDK自带工具keytool生成ssl证书_第6张图片
springboot使用JDK自带工具keytool生成ssl证书_第7张图片
springboot使用JDK自带工具keytool生成ssl证书_第8张图片
springboot使用JDK自带工具keytool生成ssl证书_第9张图片
导入完成后,进入浏览器查看安装的证书详情。

注意:
1、这里安装的证书都是PKCS12类型,文件是已xxx.p12结尾证书才可以导入,如果不是该类型,则需要自行转换。
2、服务端:需要安装服务器端证书,客户端直接安装客户端认证。为了能很好的测试,我们将服务端,客户端全部安装到浏览器。

步骤六:配置Tomcat服务器

server.xml配置方式1:

属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码

server.xml配置方式2:

参数说明:
keystoreFile证书路径。
keystorePass设置证书密码。
ciphers设置这个参数,避免chrome浏览器由于安全机制过滤,提示“服务器的瞬时 Diffie-Hellman 公共密钥过弱”。
tomcat8及以上版本,协议配置为:protocol=“org.apache.coyote.http11.Http11NioProtocol”

注意:
① 设置clientAuth属性为True时,需要手动导入客户端证书才能访问。
② 要访问https请求 需要访问8443端口,访问http请求则访问Tomcat默认端口(你自己设置的端口,默认8080)即可。

步骤七:启动Tomcat服务测试
Tomcat服务:
springboot使用JDK自带工具keytool生成ssl证书_第10张图片

浏览器访问:
http://localhost:1111/ 访问http端口会自动跳转到https端口认证。需要在server.xml中配置.
在这里插入图片描述

https://localhost:8443/ 访问时会弹出认证请求,选择个人证书确定即可。

google测试:
springboot使用JDK自带工具keytool生成ssl证书_第11张图片

火狐测试:。
springboot使用JDK自带工具keytool生成ssl证书_第12张图片
springboot使用JDK自带工具keytool生成ssl证书_第13张图片

360测试:
springboot使用JDK自带工具keytool生成ssl证书_第14张图片

springboot配置ssl(证书为JKS格式,或者.keystore文件)
1、项目结构:

springboot使用JDK自带工具keytool生成ssl证书_第15张图片
2、引入依赖包


4.0.0
com.example.https
springboot-https
0.0.1-SNAPSHOT
springboot-https
Demo project for Spring Boot


    1.8



    org.springframework.boot
    spring-boot-starter-parent
    2.0.0.RELEASE



    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    




    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    

3、修改配置文件application.properties
将tomcat.keystore拷贝到项目src/java/resources目录下.配置application.properties
#端口号
server.port=8443
#你生成的证书名字
server.ssl.key-store=tomcat.keystore
#密钥库密码
server.ssl.key-store-password=123456
server.ssl.keyStoreType=JKS
server.ssl.keyAlias:tomcat

4、增加https认证

package com.example.https.springboothttps.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.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpsConfig {

/* springboot 1.x配置
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint(“CONFIDENTIAL”);
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}

private Connector redirectConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(80);
    connector.setSecure(false);
    connector.setRedirectPort(443);
    return connector;
}

*/

//下面是2.0的配置,1.x请搜索对应的设置
@Bean
public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
    tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
    return tomcat;
}

// @Value("${httpPort}")
// private int httpPort;

private Connector createHTTPConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    //同时启用http(8080)、https(8443)两个端口
    connector.setScheme("http");
    connector.setSecure(false);
    connector.setPort(8081);
    connector.setRedirectPort(8443);
    return connector;
}

}

测试https认证
启动服务测试,同时支持8080 https访问,也支持8081 http访问。
springboot使用JDK自带工具keytool生成ssl证书_第16张图片
访问http://localhost:8080/index
springboot使用JDK自带工具keytool生成ssl证书_第17张图片

访问 http://localhost:8081/index
springboot使用JDK自带工具keytool生成ssl证书_第18张图片

Keytool详解
keytool常用命令
-alias 产生别名
-keystore 指定密钥库的名称(就像数据库一样的证书库,可以有很多个证书,cacerts这个文件是jre自带的,你也可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个)
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-list 显示密钥库中的证书信息
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目
-import 将已签名数字证书导入密钥库
-keypasswd 修改密钥库中指定条目口令
-dname 指定证书拥有者信息
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度

使用说明:
导入一个证书命令可以如下:
keytool -import -keystore cacerts -storepass 666666 -keypass 888888 -alias alibabacert -file C:\alibabajava\cert\test_root.cer
其中-keystore cacerts中的cacerts是jre中默认的证书库名字,也可以使用其它名字
-storepass 666666中的666666是这个证书库的密码
-keypass 888888中的888888是这个特定证书的密码
-alias alibabacert中的alibabacert是你导入证书的别名,在其它操作命令中就可以使用它
-file C:\alibabajava\cert\test_root.cer中的文件路径就是要导入证书的路径

浏览证书库里面的证书信息,可以使用如下命令:
keytool -list -v -alias alibabacert -keystore cacerts -storepass 666666

要删除证书库里面的某个证书,可以使用如下命令:
keytool -delete -alias alibabacert -keystore cacerts -storepass 666666

要导出证书库里面的某个证书,可以使用如下命令:
keytool -export -keystore cacerts -storepass 666666 -alias alibabacert -file F:\alibabacert_root.cer

要修改某个证书的密码(注意:有些数字认证没有私有密码,只有公匙,这种情况此命令无效)
这个是交互式的,在输入命令后,会要求你输入密码
keytool -keypasswd -alias alibabacert -keystore cacerts
这个不是交互式的,输入命令后直接更改
Keytool -keypasswd -alias alibabacert -keypass 888888 -new 123456 -storepass 666666 -keystore cacerts

认证问题
解决Chrome浏览器不能访问https网站的问题,
使用Chrome访问https网站时,可能会出现以下错误,本文说明如何解决此类问题:

“您的连接不是私密连接”、“NET::ERR_CERT_AUTHORITY_INVALID”、“ERR_CERT_COMMON_NAME_INVALID”或“NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM”

参考文档:
http://sh.qihoo.com/pc/9749f0afe8716e56c?cota=4&tj_url=xz&sign=360_e39369d1&refer_scene=so_1

源码:https://gitee.com/com_1057718341/springboot-master/tree/master/springboot-master/springboot-https

你可能感兴趣的:(springboot)