一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
https 就是在http上又加了一层(SSL)
https相对于http速度要慢,seo不好,因为百度不会收录https的网站
SSL:安全套接层协议(Secure Socket Layer)
SSL协议位于TCP/IP协议与各种应用层协议之间,是一种国际标准的加密及身份认证通信协议,为TCP提供一个可靠的端到端的安全服务,为两个通讯个体之间提供保密性和完整性(身份鉴别)。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
tomcat 配置https
单向认证,就是传输的数据加密过了,但是不会校验客户端的来源
双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的
生成单向证书
1.生成服务器端证书文件(自己生成的证书,打开网页不会被受信任,需要添加信任才能访问,需要到CA权威的机构申请全世界都认证的证书。。。。。)
keytool -genkey -alias tomcat -keyalg RSA -keystore F: omcat.keystore -validity 36500
表示有效期100年默认90天
2.修改tomcat下server.xml文件
Java代码
<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>
使用keytool 为 Tomcat 生成证书,假定目标机器的域名是“ localhost ”, keystore 文件存放在“ C: omcat.keystore ”,口令为“ password ”,使用如下命令生成:
keytool -genkey -v -alias tomcat -keyalg RSA -validity 3650 -keystore c: omcat.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass password -keypass password
这个tomcat.cer是为了解决不信任时要导入的
keytool -export -alias tomcat -keystore c: omcat.keystore -file c: omcat.cer -storepass password
第二步:为客户端生成证书
下一步是为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入至IE 和 Firefox ,证书格式应该是 PKCS12 ,因此,使用如下命令生成:
keytool -genkey -v -alias myKey -keyalg RSA -storetype PKCS12 -validity 3650 -keystore C:my.p12 -dname "CN=MyKey,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass password -keypass password
第三步:让服务器信任客户端证书
由于是双向SSL 认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将 PKCS12 格式的证书库导入,我们必须先把客户端证书导出为一个单独的 CER 文件,使用如下命令:
keytool -export -alias myKey -keystore C:my.p12 -storetype PKCS12 -storepass password -rfc -file C:my.cer
通过以上命令,客户端证书就被我们导出到“C:my.cer ”文件了。下一步,是将该文件导入到服务器的证书库,添加为一个信任证书:
keytool -import -v -file C:my.cer -keystore c: omcat.keystore -storepass password
通过list 命令查看服务器的证书库,我们可以看到两个输入,一个是服务器证书,一个是受信任的客户端证书:
keytool -list -keystore c: omcat.keystore -storepass password
第四步:配置Tomcat 服务器
打开Tomcat 根目录下的 /conf/server.xml ,找到如下配置段,修改如下:
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="C:/tomcat.keystore" keystorePass="password"
truststoreFile="C:/tomcat.keystore" truststorePass="password"/>
<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>
到这里启动tomcat,输入 https://localhost:8443/,是访问不了的:原因客户端证书没有导入浏览器
双击 “C:my.p12” 即可将证书导入至 IE :输入创建时候的密码,password
这时再打开会弹出一个提示框:证书不可信任,有一个警告,说什么需要机构颁发。
这时再双击第一步生成的tomcat.cer。一直下一步,最后选“是”。
导入后,再输入地址就不是提示了。直接转向tomcat的猫页,说明成功了。
其他:
1.ssl默认端口是443,如果web系统不需要带端口访问的,可以修改
2.如果要批量生成客户端的话,找找批量生成工具
根据公钥 私钥生成证书
https://blog.csdn.net/ca1m0921/article/details/82833556
服务端证书
keytool -genkey -v -alias jit -keyalg RSA -validity 3650 -keystore D:zhengshu生成gwcs.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 11111111 -keypass 11111111 客户端证书 keytool -genkey -v -alias jitclient -keyalg RSA -storetype PKCS12 -keystore D:zhengshu生成测试1.p12 -dname "CN=测试员2, C=CN" -storepass 11111111 -keypass 11111111
客户端证书转cer keytool -export -alias jitclient -keystore D:zhengshu生成测试1.p12 -storetype PKCS12 -storepass 11111111 -rfc -file D:zhengshu生成测试1.cer
让服务端信任客户端证书 keytool -import -v -file D:zhengshu生成测试1.cer -keystore D:zhengshu生成gwcs.keystore
一、问题现象
火狐浏览器打开HTTPS服务请求报出“服务器密钥交换握手信息中 SSL 收到了一个弱临时 Diffie-Hellman 密钥,错误码是“ssl_error_weak_server_ephemeral_dh_key”,如下图所示
二、解决问题
这时因为Firefox浏览器对于证书认证比较严格,而IE比较松
A.方法一:从根本上解决问题,需从服务端修改,在tomcat的server.xml配置Connector属性从添加 ciphers属性 (如下倒数第二行)
< Connector port = "8443" protocol = "HTTP/1.1" SSLEnabled = "true" maxThreads = "150" scheme = "https" secure = "true" clientAuth = "false" sslProtocol = "TLS" keystoreFile = "conf/test.keystore" keystorePass = "changeit" truststoreFile = "C:/NJ/PF/Java/jdk1.6.0_39/jre/lib/security/cacerts" 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" /> |
B.方法二:临时解决问题,配置Firefox浏览器,在地址输入“about:config”,把security.ssl3.dhe_rsa_aes_128_sha设置为false,security.ssl3.dhe_rsa_aes_256_sha也设置为false,默认都是true,如下图所示
C.方法三:安装disable dhe插件,点击下载,如下图