简介:
SSL 协议的3个特性:
保密:通过SSL链接传输的数据是加密的
鉴别:通信双方的身份鉴别,通常是可选的,但至少有一方需要验证(通常是服务端)
完成性:传输数据的完整性检查
从性能角度考虑,加密是一项计算昂贵的处理,因此尽量不要讲整个Web采用SSL链接,实际部署中,选择有必要进行安全加密的页面(如存在敏感信息传输的页面)采用SSL通信。
接下来相信介绍一下如何在Tomcat中添加SSL 支持。
注意:
配置Tomcat以支持SSL通常只在其作为独立的web服务器时才有必要。当Tomcat作为servlet容器运行与Web服务器后端时,只需要配置前置的Web服务器支持SSL即可。Web服务器负载所有的SSL 相关处理,Tomcat 接收到的请求为解密后的数据,而且返回的响应也是明文,有Web 服务器完成加密。
Tomcat实现SSL两种方式:
一种是JSSE,另一种是APR(默认的OpenSSL引擎)。
JSSE适用于BIO、NIO、NIO2链接器(8.5版本之后,NIO、NIO2同时支持OpenSSL,以用于HTTP/2.0), APR适用于APR链接器。由于JSSE和APR配置有明显区别,因此我们最好在Connector的protocol属性中明确指定链接器的类名,而非协议名(如HTTP/1.1),否则,Tomcat会自动按照本地配置构造connector(如果安装了APR,则适用APR链接器,否则使用NIO链接器),这样可能导致SSL不可用。
方法一(简单粗暴)
在为Tomcat添加SSL配置之前,我们需要先创建一个秘钥库。Tomcat支持秘钥库有JKS、PKCS11和PKCS112。JKS是Java标准的秘钥库格式,由keytool命令行工具创建,该工具位于$JAVA_HOME/bin/目录下。
1创建秘钥库
执行命令如下:
Windows (文件存放于C:\cert目录,存放路径也可自己定义):
keytool -genkey -alias tomcat -keyalg RSA -keystore C:\cert\mykey.key.storeLinux(文件存放于/home/liugr/cert目录,存放路径也可自己定义):
keytool -genkey -alias tomcat -keyalg RSA -keystore /home/liuge/cert/mykey.keystore?
Enter keystore password: 输入秘钥库口令
Re-enter new password: 再次输入新口令
What is your first and last name? 您的姓氏是什么
[Unknown]: Tomcat
What is the name of your organizational unit? 您的单位名称
[Unknown]: Apache
What is the name of your organization? 您的组织名称
[Unknown]: Apache
What is the name of your City or Locality?省份
[Unknown]: Beijing
What is the name of your State or Province?城市
[Unknown]: Beijing
What is the two-letter country code for this unit? 国家代码
[Unknown]: CN
Is CN=Tomcat, OU=Apache, O=Apache, L=Beijing, ST=Beijing, C=CN correct? 信息是否正确
[no]: y
Enter key password for <tomcat> 输入Tomcat的秘钥口令
(RETURN if same as keystore password): 如果和秘钥库口令相同,按回车
Re-enter new password:
2 配置server.xml文件
秘钥库密码将在server.xml配置是用到,其他信息作为基本信息,客户端可以通过浏览器查看。命令执行成功后,将生成的mykey.keystore复制到Tomcat的conf目录下。将默认注释的SSL链接器取消注释
8.5版本配置如下(server.xml的88行)
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" scheme="https" secure="true" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/mykey.keystore"
certificateKeystorePassword="123456" ##秘钥库口令
type="RSA" />
</SSLHostConfig>
</Connector>
链接器的protocol设置为org.apache.coyote.http11.Http11NioProtocol,以避免Tomcat自动选择HTTP链接器实现(当然,可以根据需要改为NIO2的实现,不能选择APR)
CertificateKeystorePassword为创建秘钥库是填写的秘钥库文件,port为SSL链接器端口,如果要修改为其他端口,必须确保与无SSL得HTTP链接器的redirectPort属性一致。
启动Tomcat,在浏览器中输入https://ip:8443,浏览器会弹出证书提示,接收后才会进入页面,而且通过浏览器还可以查看证书信息。
方法二
除此以上方法之外,我们还可以通过OpenSSL创建证书并导入到秘钥库。
注意:绝大多数Linux系统以及默认安装了OpenSSL,Windows系统中,如果你安装了Apache服务器,那样也可以在安装目录的bin文件夹下找到openssl.exe可执行文件。
OpenSSL的命令格式都是 "openssl 命令 命令参数"的形式。
1 执行以下命名生成根秘钥:
[root@ ~]# openssl genrsa -out rootkey.pem 2048输出如下: