Tomcat配置SSL(单向认证)
2017-06-20 14:43
204 查看
转载请注明出处 http://blog.csdn.net/tianxiagongzheng/article/details/73497941
单向认证:客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到 客户端,客户端用服务器发送来的公钥对数据解密,然后在用传到客户端的服务器公钥对数据加密传给服务器端,服务器用私钥对数据进行解密,这就完成了客户端 和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。
双向认证:客户端向服务器发送消息,首先把消息用客户端证书加密然后连同时把客户端证书一起发送到服务器端,服务器接到消息后用首先用客户端证书把 消息解密,然后用服务器私钥把消息加密,把服务器证书和消息一起发送到客户端,客户端用发来的服务器证书对消息进行解密,然后用服务器的证书对消息加密, 然后在用客户端的证书对消息在进行一次加密,连同加密消息和客户端证书一起发送到服务器端,到服务器端首先用客户端传来的证书对消息进行解密,确保消息是 这个客户发来的,然后用服务器端的私钥对消息在进行解密这个便得到了明文数据。
进行单向认证
1.使用keytool生成证书库文件
在命令行窗口上执行下列命令:
>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore
会在当前目录下生成文件tomcat.keystore。记住当时输入的密码(假设为123456)。
注:keytool文件是在Java的bin目录下。
2.将生成的tomcat.keystore文件放在TOMCAT/conf下。
3.修改server.xml文件:
去掉下面SSL Connector的注释,修改为如下:
<!-- Define an SSL HTTP/1.1 Connector on port 8443 -->
<Connector
port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"
SSLEnabled="true"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="conf/tomcat.keystore"
keystorePass="123456"
keystoreType="JKS"
/>
需要注意的 是 :SSLEnabled="true" 不能丢,sslProtocol 要和对应的jdk版本匹配。还有keystoreType要写对,如果keystoreType不写,会有默认值(默认好像是JKS)。查看keystoreType可以用
keytool -list 命令查看。
还有需要注意的是: 为了避免出错,tomcat运行依赖的jdk和 产生keystore的jdk版本要保持一致,这个教训很惨痛。
参数说明:
clientAuth
如果想要Tomcat为了使用这个socket而要求所有SSL客户出示一个客户证书,设置该值为true。
keystoreFile
如果创建的keystore文件不在Tomcat认为的缺省位置(一个在Tomcat运行的home目录下的叫.keystore的文件),则加上该属性。可以指定一个绝对路径或依赖$CATALINA_BASE环境变量的相对路径。
keystorePass
如果使用了一个与Tomcat预期不同的keystore(和证书)密码,则加入该属性。
keystoreType
如果使用了一个PKCS12 keystore,加入该属性。有效值是JKS和PKCS12。
sslProtocol
socket使用的加密/解密协议。如果使用的是Sun的JVM,则不建议改变这个值。据说IBM的1.4.1版的TLS协议的实现和一些流行的浏览器不兼容。这种情况下,使用SSL。
ciphers
此socket允许使用的被逗号分隔的密码列表。缺省情况下,可以使用任何可用的密码。
algorithm
使用的X509算法。缺省为Sun的实现(SunX509)。对于IBM JVMS应该使用ibmX509。对于其它JVM,参考JVM文档取正确的值。
truststoreFile
用来验证客户证书的TrustStore文件。
truststorePass
访问TrustStore使用的密码。缺省值是keystorePass。
truststoreType
如果使用一个不同于正在使用的KeyStore的TrustStore格式,加入该属性。有效值是JKS和PKCS12。
4.重新启动TOMCAT,访问https://localhost:8443/......服务器的接口路径
用java代码进行https请求,如果需要绕过 ssl 认证,网上有代码,请自行搜索。
单向认证:客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到 客户端,客户端用服务器发送来的公钥对数据解密,然后在用传到客户端的服务器公钥对数据加密传给服务器端,服务器用私钥对数据进行解密,这就完成了客户端 和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。
双向认证:客户端向服务器发送消息,首先把消息用客户端证书加密然后连同时把客户端证书一起发送到服务器端,服务器接到消息后用首先用客户端证书把 消息解密,然后用服务器私钥把消息加密,把服务器证书和消息一起发送到客户端,客户端用发来的服务器证书对消息进行解密,然后用服务器的证书对消息加密, 然后在用客户端的证书对消息在进行一次加密,连同加密消息和客户端证书一起发送到服务器端,到服务器端首先用客户端传来的证书对消息进行解密,确保消息是 这个客户发来的,然后用服务器端的私钥对消息在进行解密这个便得到了明文数据。
进行单向认证
1.使用keytool生成证书库文件
在命令行窗口上执行下列命令:
>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore
会在当前目录下生成文件tomcat.keystore。记住当时输入的密码(假设为123456)。
注:keytool文件是在Java的bin目录下。
2.将生成的tomcat.keystore文件放在TOMCAT/conf下。
3.修改server.xml文件:
去掉下面SSL Connector的注释,修改为如下:
<!-- Define an SSL HTTP/1.1 Connector on port 8443 -->
<Connector
port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"
SSLEnabled="true"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="conf/tomcat.keystore"
keystorePass="123456"
keystoreType="JKS"
/>
需要注意的 是 :SSLEnabled="true" 不能丢,sslProtocol 要和对应的jdk版本匹配。还有keystoreType要写对,如果keystoreType不写,会有默认值(默认好像是JKS)。查看keystoreType可以用
keytool -list 命令查看。
还有需要注意的是: 为了避免出错,tomcat运行依赖的jdk和 产生keystore的jdk版本要保持一致,这个教训很惨痛。
参数说明:
clientAuth
如果想要Tomcat为了使用这个socket而要求所有SSL客户出示一个客户证书,设置该值为true。
keystoreFile
如果创建的keystore文件不在Tomcat认为的缺省位置(一个在Tomcat运行的home目录下的叫.keystore的文件),则加上该属性。可以指定一个绝对路径或依赖$CATALINA_BASE环境变量的相对路径。
keystorePass
如果使用了一个与Tomcat预期不同的keystore(和证书)密码,则加入该属性。
keystoreType
如果使用了一个PKCS12 keystore,加入该属性。有效值是JKS和PKCS12。
sslProtocol
socket使用的加密/解密协议。如果使用的是Sun的JVM,则不建议改变这个值。据说IBM的1.4.1版的TLS协议的实现和一些流行的浏览器不兼容。这种情况下,使用SSL。
ciphers
此socket允许使用的被逗号分隔的密码列表。缺省情况下,可以使用任何可用的密码。
algorithm
使用的X509算法。缺省为Sun的实现(SunX509)。对于IBM JVMS应该使用ibmX509。对于其它JVM,参考JVM文档取正确的值。
truststoreFile
用来验证客户证书的TrustStore文件。
truststorePass
访问TrustStore使用的密码。缺省值是keystorePass。
truststoreType
如果使用一个不同于正在使用的KeyStore的TrustStore格式,加入该属性。有效值是JKS和PKCS12。
4.重新启动TOMCAT,访问https://localhost:8443/......服务器的接口路径
用java代码进行https请求,如果需要绕过 ssl 认证,网上有代码,请自行搜索。
相关文章推荐
- Tomcat配置SSL(单向认证)
- Tomcat简单配置实现SSL单向认证
- Tomcat配置SSL(单向认证)
- Tomcat配置SSL(单向认证)
- Tomcat配置SSL(单向认证)
- Linux下tomcat配置ssl 单向认证
- windows和linux下配置tomcat的https通信(ssl单向认证)
- Tomcat 配置 SSL (单向认证、双向认证)
- tomcat_ssl环境配置实现单向和双向认证
- keytool生成keystore、truststore、证书以及SSL单向认证在服务端tomcat和客户端的配置
- keytool生成keystore、truststore、证书以及SSL单向认证在服务端tomcat和客户端的配置
- Tomcat 6中配置SSL双向认证
- TOMCAT-SSL双向认证-配置实例
- Tomcat证书配置(ssl,客户端认证,内网证书)
- TOMCAT-SSL双向认证-配置实例 .
- tomcat实现SSL单向认证(tomcat5)
- window xp tomcat6.0配置ssl认证 (单向认证)
- Tomcat配置SSL双向认证
- Tomcat6的SSL双项认证的配置方法
- TOMCAT-SSL双向认证-配置实例