JDK自带工具keytool生成ssl证书搭建tomcat+https协议

文章出自如下两遍博文。
http://blog.csdn.net/p793049488/article/details/53422195
https://www.cnblogs.com/zhangzb/p/5200418.html


1、什么是HTTPS?

HTTPS其实是有两部分组成:HTTP + SSL / TLS,
也就是在HTTP上又加了一层处理加密信息的模块,并且会进行身份的验证。
问题:
    Firebug和postman之类的浏览器调试工具,为什么获取到的是明文?
解答:
    SSL是对传输的数据进行加密,针对的是传输过程的安全。 firebug之类的浏览器调试工具,
因为他们得到的是客户端加密之前/解密之后的数据,因此是明文的。

2、什么是自签名证书?

就是自己生成的证书,并不是官方生成的证书。
除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书是要花钱滴。

3、使用JDK自带工具KeyTool 生成自签发证书 搭建tomcat+https协议

1、生成服务器证书

CMD进入JDK安装目录:
这里写图片描述
生成服务器证书:

keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/keys1/tomcat.keystore -validity 365

这里写图片描述

参数说明:
genkey生成方式,对称或者非对称
-alias tomcat(别名)
-keypass 123456(别名密码)
-keyalg RSA(算法)
-keysize 1024(密钥长度)
-validity 365(有效期,天单位)
-keystore D:/keys1/tomcat.keystore(指定生成证书的位置和证书名称)
-storepass 123456(获取keystore信息的密码)

注:以上的keystore密码建议设置成一致,避免混乱。这里设置测试密码为123456。输入密码后,提示输入名字与姓氏,这里输入浏览器访问域名。其他项直接回车跳过即可。D:/keys1/ 目录需要提前手动创建好,否则会生成失败

2、生成客户端证。
keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore  D:/keys1/clientkey.p12

这里写图片描述

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

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

keytool -export -alias clientkey -keystore  D:/keys1/clientkey.p12 -storetype PKCS12 -storepass 123456 -rfc -file  D:/keys1/clientkey.cer

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

4、将客户端证书导入服务器证书库。(服务器信任客户端证书)
keytool -import -v -file  D:/keys1/clientkey.cer -keystore D:/keys1/tomcat.keystore

这里写图片描述

5、客户端信任服务器证书:
keytool -keystore D:/keys1/tomcat.keystore -export -alias tomcat -file D:/keys1/tomcat.cer

这里写图片描述

至此证书已经生成。

6、本地安装证书。

双击tomcat.cer–>安装证书–>证书存储选择“受信任的根证书颁发机构”–>后面根据提示安装即可
这里写图片描述

7、配置tomcat种server.xml

配置server.xml中8443端口。观察tomcat中端口配置:

这里有配置redirectPort=”8443” 。猜测这里如果添加了SSL/TLS证书后,利用http协议8080端口访问将自动重定向到8443端口。所以这里修改8443为TLS认证协议:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="D:/keys1/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_C 
                BC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RS 
                A_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
              />

属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
ciphers:设置这个参数,避免chrome浏览器由于安全机制过滤,提示“服务器的瞬时 Diffie-Hellman 公共密钥过弱”。

8、配置工程web.xml,添加ssl认证,将http请求全部需要ssl认证:

在 tomcat /conf/web.xml 中的 后面加如下配置

    <login-config>
        <!-- Authorization setting for SSL -->
        <auth-method>CLIENT-CERT</auth-method>
        <realm-name>Client Cert Users-only Area</realm-name>
    </login-config>
    <security-constraint>
        <!-- Authorization setting for SSL -->
        <web-resource-collection>
            <web-resource-name>SSL</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

到这所有配置已完成。下面来进行测试:

9、测试

由于我们在生成客户端、服务端证书中提示输入名字与姓氏,这里输入浏览器访问域名(www.test.com)。所以本地测试,要配置windows机器的host文件,将本地ip映射到可访问的域名。找到C:\Windows\System32\drivers\etc目录下的hosts文件编辑:
这里写图片描述

好了,开始启动tomcat,访问项目:
这里写图片描述

测试成功!!

注:如果使用分布式工程。需要将另一个tomcat访问端口重定向redirectPort=”8443”进行修改。比如修改为8444,此时ssl配置Connector 也应改为8444。否则将提示端口被占用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以按照以下步骤使用 keytool 工具生成自签名的 SSL 证书: 1. 打开命令行窗口,并导航到 JDK 的 bin 目录下。 2. 输入以下命令以生成 SSL 证书: ```bash keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048 ``` 其中,`mydomain` 是证书别名,`keystore.jks` 是证书库的名称。 3. 在运行上述命令后,会提示输入一些信息,如下所示: ```bash What is your first and last name? [Unknown]: example.com What is the name of your organizational unit? [Unknown]: IT What is the name of your organization? [Unknown]: Example Corp What is the name of your City or Locality? [Unknown]: Anytown What is the name of your State or Province? [Unknown]: CA What is the two-letter country code for this unit? [Unknown]: US Is CN=example.com, OU=IT, O=Example Corp, L=Anytown, ST=CA, C=US correct? [no]: yes Enter key password for <mydomain> (RETURN if same as keystore password): ``` 按照提示输入相关信息,其中 `CN`(Common Name)应该与您的域名相匹配。 4. 然后,系统会提示输入密钥库密码和密钥密码。这两个密码应该是不同的。如果您希望两个密码相同,可以按回车键跳过第二个密码的设置。 5. 生成证书后,可以使用以下命令查看证书的详细信息: ```bash keytool -list -v -keystore keystore.jks ``` 这将输出证书的详细信息,包括证书别名、证书类型、证书序列号、颁发者、有效期等。 6. 最后,将生成证书用于您的应用程序中。 注意:在生产环境中,应该使用受信任的第三方机构颁发的证书。这些证书可以通过购买或免费获取。自签名的证书仅适用于开发和测试环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值