zoukankan      html  css  js  c++  java
  • tomcat生成ssl证书并发布浏览器信任的https服务

    之前已经有一篇文章写了tomcat配置https,但是没有设置信任,这样在某些浏览器会发出警告阻止访问。

    这篇文章来探讨一下怎么设置证书信任。

    1、生成服务器证书:

    CMD进入JDK安装目录:cd F:javaj2sdk1.8.0.231in。输入命令:

    keytool -genkey -v -alias tomcat -keyalg RSA -keystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -validity 365
    

    效果

    C:WINDOWSsystem32>cd F:javaj2sdk1.8.0.231in
    
    C:WINDOWSsystem32>F:
    
    F:javaj2sdk1.8.0.231in>keytool -genkey -v -alias tomcat -keyalg RSA -keystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -validity 365
    输入密钥库口令:
    再次输入新口令:
    您的名字与姓氏是什么?
      [Unknown]:  localhost
    您的组织单位名称是什么?
      [Unknown]:
    您的组织名称是什么?
      [Unknown]:
    您所在的城市或区域名称是什么?
      [Unknown]:
    您所在的省/市/自治区名称是什么?
      [Unknown]:
    该单位的双字母国家/地区代码是什么?
      [Unknown]:
    CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
      [否]:  y
    
    正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 365 天):
             CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
    输入 <tomcat> 的密钥口令
            (如果和密钥库口令相同, 按回车):
    [正在存储F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore]
    
    Warning:
    JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -destkeystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
    
    F:javaj2sdk1.8.0.231in>
    

    (参数说明:genkey生成方式,对称或者非对称。alias定义别名。F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore 指定生成服务器证书库路径。validity证书有效期,365为一年)

    注:以上的keystore密码建议设置成一致,避免混乱。这里设置测试密码为123456。输入密码后,提示输入名字与姓氏,这里输入浏览器访问域名。这里本地测试,故输入localhost。其他项直接回车跳过即可。

    2、生成客户端证书:

    keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore F:/java/v160Btomcat8.5.47/ssl/clientkey.p12
    

    效果

    F:javaj2sdk1.8.0.231in>keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore F:/java/v160Btomcat8.5.47/ssl/clientkey.p12
    输入密钥库口令:
    再次输入新口令:
    您的名字与姓氏是什么?
      [Unknown]:  localhost
    您的组织单位名称是什么?
      [Unknown]:
    您的组织名称是什么?
      [Unknown]:
    您所在的城市或区域名称是什么?
      [Unknown]:
    您所在的省/市/自治区名称是什么?
      [Unknown]:
    该单位的双字母国家/地区代码是什么?
      [Unknown]:
    CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
      [否]:  y
    
    正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 90 天):
             CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
    [正在存储F:/java/v160Btomcat8.5.47/ssl/clientkey.p12]
    
    F:javaj2sdk1.8.0.231in>
    

    3、这里服务端跟客户端生成完证书,双向需要认证。首先,让服务器信任客户端证书:

    由于不能直接将PKCS12格式的证书库导入,所以必须先把客户端证书导出为一个单独的CER文件。

    keytool -export -alias clientkey -keystore F:/java/v160Btomcat8.5.47/ssl/clientkey.p12 -storetype PKCS12 -storepass 123456 -rfc -file F:/java/v160Btomcat8.5.47/ssl/clientkey.cer
    

    效果

    F:javaj2sdk1.8.0.231in>keytool -export -alias clientkey -keystore F:/java/v160Btomcat8.5.47/ssl/clientkey.p12 -storetype PKCS12 -storepass 123456 -rfc -file F:/java/v160Btomcat8.5.47/ssl/clientkey.cer
    存储在文件 <F:/java/v160Btomcat8.5.47/ssl/clientkey.cer> 中的证书
    
    F:javaj2sdk1.8.0.231in>
    

    注:alias的别名clientkey必须与客户端证书别名一致。storepass为上述设置的密码。

    4、将客户端证书导入服务器证书库。(服务器信任客户端证书)

    keytool -import -v -file F:/java/v160Btomcat8.5.47/ssl/clientkey.cer -keystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore
    

    效果

    F:javaj2sdk1.8.0.231in>keytool -import -v -file F:/java/v160Btomcat8.5.47/ssl/clientkey.cer -keystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore
    输入密钥库口令:
    所有者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
    发布者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
    序列号: 1585c1c9
    有效期为 Tue Feb 23 15:23:11 CST 2021 至 Mon May 24 15:23:11 CST 2021
    证书指纹:
             MD5:  32:B7:3C:11:13:20:23:3B:A7:F5:89:5F:1A:78:13:27
             SHA1: 6B:46:D5:06:0C:5B:D6:E3:46:D4:D5:68:7C:0A:09:AC:B1:BA:9D:80
             SHA256: 03:F6:E0:BE:CB:F4:57:9D:12:E8:AB:97:52:90:5D:E6:C4:8C:58:94:1C:9B:A9:FA:5B:88:2F:08:66:C2:14:EC
    签名算法名称: SHA256withRSA
    主体公共密钥算法: 2048 位 RSA 密钥
    版本: 3
    
    扩展:
    
    #1: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
    KeyIdentifier [
    0000: 2D 46 E9 66 7A 9E 8A A4   89 66 B6 28 19 02 6D F0  -F.fz....f.(..m.
    0010: 84 4B EC F2                                        .K..
    ]
    ]
    
    是否信任此证书? [否]:  y
    证书已添加到密钥库中
    [正在存储F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore]
    
    Warning:
    JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -destkeystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
    
    F:javaj2sdk1.8.0.231in>
    

    5、客户端信任服务器证书:

    keytool -keystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -export -alias tomcat -file F:/java/v160Btomcat8.5.47/ssl/tomcat.cer
    

    效果

    F:javaj2sdk1.8.0.231in>keytool -keystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -export -alias tomcat -file F:/java/v160Btomcat8.5.47/ssl/tomcat.cer
    输入密钥库口令:
    存储在文件 <F:/java/v160Btomcat8.5.47/ssl/tomcat.cer> 中的证书
    
    Warning:
    JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -destkeystore F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
    
    F:javaj2sdk1.8.0.231in>
    

    导入后,本地安装证书。双击tomcat.cer根据提示安装。

    注意,一定要添加到“受信任的根证书颁发机构”。

    6、配置tomcat的server.xm和8443端口。观察tomcat中端口配置:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
      maxThreads="150" scheme="https" secure="true"
      clientAuth="false" sslProtocol="TLS" 
      keystoreFile="F:/java/v160Btomcat8.5.47/ssl/tomcat.keystore" keystorePass="123456"
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
    />
    
  • 相关阅读:
    css 之 input 的提交样式
    JSON 没错又是它!!!
    json 对象解析 function 里面的return 和return false 查找字符串最后的结尾字符
    sql 中update 对字符串进行批量替换
    17 常用模块
    16 模块深入
    15 模块
    14 生成器,生成器表达式,内置函数,面向过程编程
    13 迭代器
    12 递归 三元表达式 列表生成式 字典生成式 匿名函数
  • 原文地址:https://www.cnblogs.com/tangyouwei/p/14436210.html
Copyright © 2011-2022 走看看