• -------------------------------------------------------------
  • ====================================

linux tomcat7 配置证书(JKS和PKCS12格式)

技能 dewbay 5年前 (2019-07-29) 2587次浏览 已收录 0个评论 扫描二维码

1. 环境说明
系统:debian7

JDK 版本:1.7

tomcat 版本:7

2. 启动tomcat7说明
apt-get install tomcat7之后,tomcat 相关文件会被分配到两个目录:一个是/var/lib/tomcat7,另外一个是/usr/share/tomcat7

这两个目录 catalina.home=/usr/share/tomcat7;catalina.base=/var/lib/tomcat7

在/usr/share/tomcat7/bin 目录下有个 startup.sh 脚本,如果只执行这个脚本启动 tomcat,会报错,说找不到/usr/share/tomcat7/conf/server.xml,而事实上/usr/share/tomcat7/conf 目录是不存在的,更别提 server.xml 文件了。究其原因是因为/usr/share/tomcat7/bin/catalina.sh 没有设置 catalina.base 和 catalina.home,执行 startup.sh 默认 catalina.base 和 catalina.home 都是/usr/share/tomcat7 目录,从而无法引用到/var/lib/tomcat7/conf/server.xml。解决方法就是在 catalina.sh 脚本内添加下面两句:

CATALINA_HOME=/usr/share/tomcat7
CATALINA_BASE=/var/lib/tomcat7

然后 startup.sh 启动就没问题了。

当然也可以不用配置这两个环境变量,直接用 service tomcat7 start|stop|restart,或者/etc/init.d/tomcat7 start|stop|restart

3. 生成证书
Tomcat 目前只能操作 JKSPKCS11、PKCS12 格式的密钥存储库。JKS 是 Java 标准的“Java 密钥存储库”格式,是通过 keytool 命令行工具创建的。该工具包含在 JDK 中。PKCS12 格式一种互联网标准,可以通过 OpenSSL 和 Microsoft 的 Key-Manager 来。下面将介绍使用JKSPKCS12格式密钥存储库给 tomcat7配置证书

3.1 生成JKS密钥存储库
[root@localhost ~]# $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/share/tomcat7/bin/.keystore -validity 36500

输入 keystore 密码:
再次输入新密码:
您的名字与姓氏是什么?
[Unknown]: aaaaaa
您的组织单位名称是什么?
[Unknown]: aaaaaa
您的组织名称是什么?
[Unknown]: aaaaaa
您所在的城市或区域名称是什么?
[Unknown]: aaaaaa
您所在的州或省份名称是什么?
[Unknown]: aaaaaa
该单位的两字母国家代码是什么
[Unknown]: CN
CN=aaaaaa, OU=aaaaaa, O=aaaaaa, L=aaaaaa, ST=aaaaaa, C=CN 正确吗?
[y/n]: y

输入<tomcat>的主密码
(如果和 keystore 密码相同,按回车):

[root@localhost ~]# cd /usr/share/tomcat7/bin/
[root@localhost bin]# keytool -selfcert -alias tomcat -keystore .keystore
输入 keystore 密码:
[root@localhost bin]# keytool -export -alias tomcat -keystore .keystore -storepass aaaaaa -rfc -file tomcat.cer
保存在文件中的认证 <tomcat.cer>

3.2 生成PKCS12格式密钥存储库
创建密钥文件,自己做 CA:

openssl genrsa -des3 -out openssl.pem 2048

输出内容为:
Generating RSA private key, 2048 bit long modulus
………………………………………………………………………………………………………+++
……………………..+++
e is 65537 (0x010001)
Enter pass phrase for openssl.pem: ← 输入一个新密码
Verifying – Enter pass phrase for openssl.pem: ← 重新输入一遍密码
创建证书申请文件:
openssl req -new -key openssl.pem -out openssl.csr

输出内容为:
Enter pass phrase for openssl.pem: ← 输入前面创建的密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]:CN ← 国家代号,中国输入 CN
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名
Organizational Unit Name (eg, section) []: ← 可以不输入
Common Name (eg, YOUR name) []: ← 此时不输入
Email Address []:admin@mycompany.com ← 电子邮箱,可随意填

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 可以不输入
An optional company name []: ← 可以不输入
创建证书文件,有效期设为 100 年:
openssl x509 -req -days 36500 -sha256 -signkey openssl.pem -in openssl.csr -out openssl.crt

输出内容为:
Signature ok
subject=/C=CN/ST=BeiJing/L=BeiJing/O=MyCompany Corp./emailAddress=admin@mycompany.com
Getting Private key
Enter pass phrase for openssl.pem: ← 输入前面创建的密码
导出.p12 文件:
openssl pkcs12 -export -in openssl.crt -inkey openssl.pem -out openssl.p12 -name “openssl”

根据命令提示,输入 openssl.pem 密码,创建 p12 密码。

将.p12 文件导入到 keystore JKS文件 server.keystore:

keytool -importkeystore -v -srckeystore  openssl.p12 -srcstoretype pkcs12 -srcstorepass aaaaaa -destkeystore openssl.keystore -deststoretype jks -deststorepass aaaaaa
这里 srcstorepass 后面的 aaaaaa 为 openssl.p12 的密码,deststorepass 后的 aaaaaa 为 keyStore 的密码

4. 配置 tomcat
vim /var/lib/tomcat7/conf/server.xml

<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”150″ scheme=”https” secure=”true”
keystoreFile=”/usr/share/tomcat7/bin/.keystore”
keystorePass=”aaaaaa”
clientAuth=”false” sslProtocol=”TLS” />
https 默认端口是 443,但是我发现使用 443 端口配置会导致这个 connector 无法启动。1000 以内的端口是需要用 root 权限去启动的,但是 service tomcat7 start 的时候用的其实是 tomcat7 用户,并非 root。该如何使用 root 账号启动 tomcat 暂时没有去研究。

在此处配置 connector 的时候只需要使用到前面生成的 keystore 即可。

5. 配置防火墙
iptables -I INPUT -s yourIpAddress -p tcp –dport 8443 -j ACCEPT

iptables -I INPUT 2 -p tcp –dport 8443 -j DROP  //直接将这一条规则插到防火墙配置的最后就好了。数字 2 根据当前机器共有多少条规则进行修改,比如有 10 条规则,那么就改成 10,不懂可以评论。

到此 tomcat7 配置就完成了,可以 https://host:8443 的方式访问/var/lib/tomcat7/webapps 目录内的 web 站点了。

6. 强制 http 转为 https
我们可以在/var/lib/tomcat7/conf/web.xml 文件末尾加上以下内容:

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!– 强制将 http 请求转换为 https –>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<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>
</web-app>
重启 tomcat 便可以将访问 web 站点的 http 请求全部转为 https 请求。
当然使用这个配置是有个前提的,那就是/var/lib/tomcat7/conf/server.xml 中必须配置 8080 端口的 redirectPort=”8443″
<Connector port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
URIEncoding=”UTF-8″
redirectPort=”8443″ />
并且配置了 8443 端口的 connector
<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”150″ scheme=”https” secure=”true”
keystoreFile=”/var/lib/tomcat7/key/.keystore”
keystorePass=”aaaaaa”
clientAuth=”false” sslProtocol=”TLS” />

整个配置过程中如果出现启动问题,可以查看/var/lib/tomcat7/logs 目录内的 catalina.yyyy-mm-day.log,这个日志会记录启动 tomcat7 的异常问题。

本文在配置证书过程中参考了以下博客,在此表示感谢。

http://www.cnblogs.com/sixiweb/p/3339698.html

http://www.jianshu.com/p/045f95c008a0#


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:linux tomcat7 配置证书(JKS和PKCS12格式)
喜欢 (1)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址