一 、1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源
2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址,想要用系统的人没有证书就访问不了系统HTTPS概念
二、1.单向认证,就是传输数据加密过,但是不会教研客户来源
2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址,想要用系统的人没有证书是访问不了https的
2.1https概念,是以安全为目标的http通道,就是安全版的http,就是http加入ssl安全认证,https的基础就是ssl所以加密详细内容就需要ssl
三、https和http的区别
1.https协议需要到ca申请证书,一遍免费证书很少,需要缴费
2.http时超文本协议,信息的传输通常都是明文,而https是经过ssl加密后再进行传输
3.http和https使用的是完全不同的连接方式,用得默认端口都不一样,http默认端口:80,而https默认端口为432
4.http的连接很简单,是无状态的,而https协议是由ssl+http协议构建的可进行加密、传输身份认证的网络协议,比http协议安全
四、https的作用
1.主要作用分为俩种
1.1建立信息安全通道,保证数据传输的安全
1.2确认网站的安全性
2.一般意义上的https就是服务有一个证书,主要目的是保证服务的器就是他声称的服务器,意思就是服务端和客户端通信都是ssl加密的。
3.客户端证书其实就是通信时,不止验证你的用户名密码,还要验证你的ca证书
五、HTTPS_SSL配置的步骤:
- 验证是否已创建过同名的证书
keytool -list -v -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
2.删除已创建的证书
keytool -delete -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
3.创建证书
3.1服务器中生成证书:
(注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost)
keytool -genkey -alias tomcat -keyalg RSA -keystore d:/mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit
keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help
-genkey 创建新证书
-v详细信息
-alias以”mykey”作为该证书的别名。这里可以根据需要修改
-keyalgRSA 指定算法
-keysize 指定算法加密后密钥长度
-keystorec:\sdust.keystore保存路径及文件名
-validity3650证书有效期,单位为天
CN=你的ip,OU=cn,O=cn,L=cn,ST=cn,c=cn 基本信息的配置
CN=你的ip 这个配置务必注意
-storepass 123456789 -keypass 123456789 密码设置
3.2导出证书,由客户端安装:
keytool -export -alias tomcat -keystore d:/mykeystore -file d:/mycerts.cer -storepass changeit
3.3客户端配置:为客户端的JVM导入密钥(将服务器下发的证书导入到JVM中)
keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file d:/mycerts.cer -storepass changeit
4.配置Tomcat SSL
修改server.xml中的SSL服务
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="server.keystore" keystorePass="changeit"/>
属性说明:clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证keystoreFile:服务器证书文件路径keystorePass:服务器证书密码truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书truststorePass:根证书密码
5.常见问题
- 未找到可信任的证书
主要原因为在客户端未将服务器下发的证书导入到JVM中,可以用
keytool -list -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
来查看证书是否真的导入到JVM中。
- keytool错误:java.io.IOException:keystore was tampered with,or password was incorrect
原因是在你的home目录下是否还有.keystore存在。如果存在那么把他删除掉,后再执行
或者删除"%JAVA_HOME%/jre/lib/security/cacerts 再执行
建议直接删掉cacerts再导入