本文已参加「新人创作礼」活动,一起敞开创作之路。
一、预备
首先你要有个服务器,服务器上要有JDK和Tomcat,JDK和Tomcat的装置请自行百度,这儿不赘述。
我的JDK版别为1.8.0_311
,Tomcat版别为10.0.14
,其他版别请自行验证。装备中我全程使用的是root用户,如果你用的是其他用户,请注意相应的Linux权限问题。由于我用的是java的keytool东西,所以Windows生成证书的指令跟Linux的指令一样,与操作体系无关。
二、为服务器生成自签证书(单双向认证都需求)
1.在/opt目录下创立ca文件夹
意图:便利证书管理,详细放在哪个文件夹没有硬性要求,放在/opt文件夹下是我个人的习气。
指令:
(1)移动到/opt文件夹: cd /opt
(2)创立ca文件夹:mkdir ca
截图:
2.创立服务器证书(keystore格局)
指令:
(1)移动到刚刚创立的ca文件夹下:cd /opt/ca
(2)利用Java自带的keytool东西创立服务器证书:keytool -genkey -v -alias tomcat -keyalg RSA -ext SAN=ip:82.156.193.157 -validity 365000 -keystore tomcat.keystore
指令参数阐明:
-genkey
:在用户主目录中创立一个默许文件”.keystore”,还会发生一个mykey的别号,mykey中包括用户的公钥、私钥和证书。
-v
:显现密钥库中的证书详细信息
-alias
:设置证书别号,设置后会代替默许的mykey。
-keyalg
:设置秘钥算法。
-ext
:扩展,能够设置域名信息与内外网地址。如果是IP方法拜访用-ext SAN=ip:你的IP
,如果是域名用 -ext SAN=dns:你的域名
-validity
:设置证书有效期,最大为9999年。
-keystore
:指定密钥和证书库,如果是放到Windows体系的C盘,需求管理员权限。
截图:
三、为客户端生成自签证书(仅双向认证需求,单向认证可忽略)
1.创立客户端证书(p12格局)
意图:HTTPS比HTTP协议安全的主要原因便是HTTPS比HTTP多了证书验证这一步,阻止了中间人进犯。HTTPS的认证方法有两种,一是单向认证,二是双向认证。对于安全性要求不高的体系,采用单向认证就足够了,也便是客户端认证服务器端。可是如果想使体系安全性更高,我们就需求利用客户端证书来完成双向认证。
指令:
(1)利用Java自带的keytool东西创立客户端证书:keytool -genkey -v -alias client -keyalg RSA -validity 365000 -storetype PKCS12 -keystore client.p12
参数阐明:
-genkey
:在用户主目录中创立一个默许文件”.keystore”,还会发生一个mykey的别号,mykey中包括用户的公钥、私钥和证书。
-v
:显现密钥库中的证书详细信息
-alias
:设置证书别号。
-keyalg
:设置秘钥算法。
-validity
:设置证书有效期,最大为9999年。
-storetype
:设置密钥库的类型。
-keystore
:指定密钥库,如果是放到Windows体系的C盘,需求管理员权限。
截图:
2.将p12格局的客户端证书转换为cer格局
意图: p12格局的证书无法直接导入客户端证书(tomcat.keystore)中,需求先转换成cer格局。
指令:
(1)p12格局转cer格局:keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer
参数阐明:
-export
:导出证书
-alias
:设置别号
-keystore
:指定源证书的途径与称号
-storetype
:指定源证书的类型
-storepass
:验证源证书的暗码
-rfc
:将以可打印的编码格局输出证书
-file
:指定方针证书的途径、文件名和类型
截图:
四、将客户端证书导入服务器证书中(仅双向认证需求,单向认证可忽略)
1.客户端证书导入服务器证书
意图:服务器端认证客户端证书。
指令:
(1)将客户端证书导入服务器证书中:keytool -import -v -file client.cer -keystore tomcat.keystore
参数阐明:
-import
:导入证书
-v
:显现密钥库中的证书详细信息
-file
:填写被导入证书的途径与文件名,此处为客户端证书
-keystore
:填写方针证书的途径与文件名,此处为服务器端证书
截图:
2.查看导入状况
意图:验证证书导入状况
指令:
(1)在屏幕打印证书概况:keytool -list -keystore tomcat.keystore
证书信息阐明:由于在导入时没有给客户端证书设置别号,因此客户端证书别号默许为mykey
截图:
五、Tomcat装备服务器端证书(单双向认证都需求)
意图:通过装备Tomcat的server.xml文件,让Tomcat能够解析服务器证书。其他服务器装备证书的方法请自行百度。
操作过程:
(1)将以下代码加入到Tomcat的server.xml文件中,注意Tomcat 8、9和Tomcat 10的增加写法不一样。装备项“clientAuth”设置为false,即可封闭Tomcat验证
<!-- Tomcat 8、9增加证书 -->
<Connector
port="443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/opt/ca/tomcat.keystore"
keystorePass="123456"
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"
truststoreFile="/opt/tomcat.keystore"
truststorePass="123456"
/>
<!-- Connector参数阐明:
Connector参数我只写了我需求的那部分,Connector参数还有许多,详细参数介绍请直接看Tomcat 9的官方阐明:https://tomcat.apache.org/tomcat-9.0-doc/config/http.html -->
<!-- Tomcat 10增加证书 -->
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443"
clientAuth="false"
SSLEnabled="true">
<SSLHostConfig>
<Certificate
certificateKeystoreFile="/opt/ca/tomcat.keystore"
certificateKeystorePassword="123456"
type="RSA"
/>
</SSLHostConfig>
</Connector>
<!-- Connector参数阐明:
Connector参数我只写了我需求的那部分,Connector参数还有许多,详细参数介绍请直接看Tomcat10 的官网阐明:https://tomcat.apache.org/tomcat-10.0-doc/ssl-howto.html#Configuration -->
六、客户端装置服务器证书(单双向认证都需求)
1.将服务器证书keystore转为cer格局
意图:cer格局便于在浏览器、Windows体系、iis证书装置,便于用Hbuilder打包安卓APP等(Hbuilder直接用keystore就行) 。
指令:
(1)keytool -keystore tomcat.keystore -export -alias tomcat -file server.cer
参数阐明:能够参考客户端p12格局转cer格局
截图:
2.浏览器、Windows装置服务器证书
这儿以Chrome浏览器为例,edge、火狐、360、2435、QQ等浏览器通用,IE浏览器装备方法请自行百度。
(1)复制服务器证书到客户端。我用的是WinSCP将服务器端证书(server.cer)下载到客户端电脑上的。
(2)双击服务器证书文件(server.cer),点击装置证书。
(3)挑选装置证书到当时用户,或悉数用户,这儿我挑选装置给这台电脑上的悉数用户
(4)挑选证书存储位置,这儿要挑选“受信任的根证书颁布组织”
(5)完成装置
七、验证奇观的时刻(客户端成功单向认证服务器!)
翻开浏览器,利用HTTPS拜访Tomcat服务器的示例项目,能够看到现已完成了HTTPS衔接,单向认证现已完成。
截图: