之前找的是公司安全组做的证书,也是自签名证书吧。然后最近测试服务器迁了网段,导致ios客户端的cer证书用不了了,就不能正常下载和更新ipa。所以需要重新做个证书,这次我就自己搞个证书,看了下面的资料,验证可用。虽然是tomcat的,但是jboss也类似。关键还是要拿到客户端用的cer证书和服务端用的tomcat证书。注意我做的时候,ca证书和tomcat证书的名字都是ip,如果ca证书的name改了,我不确定能否可用。我做证书的过程参考的是百度文库的,客户端证书选择则是看了下文。
正文开始:
证书的配置过程:
参考页面:http://wenku.baidu.com/view/7f3c491f650e52ea5518987b.html
这里做个转载,并记录过程中遇到的问题,及解决方法
1. 工具:openssl + tomcat7.0 openssl地址:http://files.cnblogs.com/leeshd/OpenSSL.rar,下载后进入安装目录下的bin目录
2. 生成根证书的私钥,生成文件cakey.pem
openssl genrsa -out cakey.pem 1024
3. 根据私钥生成证书申请,生成文件careq.csr
openssl req -new -out careq.csr -key cakey.pem
如果在window系统下,需要添加-config openssl.cnf,linux下则不需要。
4. 根据根证书申请生成自签名根证书,生成文件cacert.pem
openssl x509 -req -n careq.csr -out cacert.pem -signkey cakey.pem -days 3650
生成tomcat证书库文件和证书申请
1. 生成证书库文件 tomcatkey.jks
keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity "1825" -keypass 123456 -keystore tomcatkey.jks -storepass 123456
着色部分可以根据具体情况改变
参数:-alias 证书库文件中私钥的别名
-keypass 证书库文件私钥的密码
-keystore 证书库文件的存储路径
-storepass 证书库文件的密码
名字和姓氏必须要输入服务器的域名或者ip地址,建议ip地址,否则部署后会提示 证书不匹配 的错误
2. 根据证书库文件生成证书申请,生成文件certreq.cer
keytool -certreq -alias tomcat_server -sigalg "MD5withRSA" -file certreq.cer -keypass 123456 -keystore tomcatkey.jks -storepass 123456
制作服务器证书并导入证书库
1. 用根证书签名证书申请生成根证书,生成文件tomcatcert.pem
openssl ca -keyfile cakey.pem -cert cacert.pem -in certreq.cer -out tomcatcert.pem -config openssl.cnf -policy policy_anything
如果在window系统下,需要添加-config openssl.cnf,linux下则不需要。
(证书可能失败,原因是openssl证书数据库中已经存储了这个证书,错误输出:failed to update database, IXI_DB error number 2,
解决办法是在目录openssl/democa/index.txt,把内容清空,查看大小为0KB,这个做法会把已有的证书删除,有耐心可以找到那条记录并删除他)
2. 转pem格式为cer格式,生成文件cacert.cer,tomcatcert.cer
openssl x509 -in cacert.pem -out cacert.cer
openssl x509 -in tomcatcert.pem -out tomcatcert.cer
3. 将转换成功的cer文件导入证书库文件中
导入根证书:keytool -keystore tomcatkey.jks -import -alias RootCA -file cacert.cer
导入服务器证书:keytool -keystore tomcatkey.jks -import -alias tomcat_server -file tomcatcert.cer
Tomcat配置
1. server.xml
找到<Connector port="8443" .../>,默认被注释掉的,修改如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="E:/tomcatkey.jks" keystorePass="123456"
truststoreFile="E:/tomcatkey.jks" truststorePass="123456">
如果是tomcat6.0,则 protocol为HTTP/1.1
其中,clientAuth 表示客户认证,由于双向认证一般在 B2B 中,这里只需要服务器认证即可。
keystoreFile 表示证书地址(相对地址或绝对地址皆可),keystorePass 与之前设置的密码一致。
2. web.xml
在<web-app>标签内末尾:
<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>
3. 启动tomcat,在浏览器中输入https://ip:8443,此时浏览器会提示不安全的连接,直接进入地址栏会出现证书错误的提示,点击错误区域按照提示安装证书。
或者 Inernet选项-内容-证书-受信任的根证书颁发机构-导入,选中之前的cacert.cer和tomcatcert.cer,就oK了
移动设备访问安装页面
在ios设备的safiri中输入页面地址,点击安装连接时会提示 无法连接到xxx.xxx.xxx.xxx,那是因为safiri没有安装证书信任此连接,所以要先安装证书,才能正常。
在浏览器中输入cacert.cer的地址(一开始我用了tomcatcert.cer导致没法用),设备会自动跳转到安装步骤,按照步骤完成安装就可以了,注意最后证书上要有绿色的信任标记才表明安装成功,如果是红色叉号表面安装失败。
安装成功后就可以使用无线安装app了。
PS. 浏览器下安装证书
在macos系统下,使用tomcatcert.cer文件,并将信任设置设置为:总是信任,操作步骤:双击cer文件,在钥匙串访问中,双击此证书会弹出一个详情框,展开信任标签,有一项是"使用此证书时"的combobox选项,展开并选中"总是信任",然后在重启浏览器就OK。
在win7下,使用cacert.cer文件,使用证书导入或者直接点击安装,最后需要确认是否已经安装上去。操作步骤:internet选项 -> 内容 -> 证书 -> 查看证书是否存在即可。最后重启浏览器就OK。
最后提供一个windows下的批处理文件,一键生成证书:
keytool参数 参考 http://deanandbai-gmail-com.iteye.com/blog/1538749
@echo off
echo -----------------------------------
echo 1. 生成根证书...
openssl genrsa -out cakey.pem 1024
openssl req -new -out careq.csr -key cakey.pem -config openssl.cnf -subj /C=CN/ST=JiangSu/L=NanJing/O=Zyx/CN=your ip
openssl x509 -req -in careq.csr -out cacert.pem -signkey cakey.pem -days 3650
echo -----------------------------------
echo 2. 证书申请...
keytool -genkey -alias tomcat_server -keyalg RSA -keysize 1024 -validity "1825" -keypass 123456 -keystore tomcatkey.jks -storepass 123456 -dname C=CN,ST=JiangSu,L=NanJing,O=Zyx,CN=your ip
keytool -certreq -alias tomcat_server -sigalg "MD5withRSA" -file certreq.cer -keypass 123456 -keystore tomcatkey.jks -storepass 123456
echo -----------------------------------
echo 3. 证书导入...
openssl ca -keyfile cakey.pem -cert cacert.pem -in certreq.cer -out tomcatcert.pem -config openssl.cnf -policy policy_anything
openssl x509 -in cacert.pem -out cacert.cer
keytool -keystore tomcatkey.jks -import -alias RootCA -file cacert.cer -storepass 123456
openssl x509 -in tomcatcert.pem -out tomcatcert.cer
keytool -keystore tomcatkey.jks -import -alias tomcat_server -file tomcatcert.cer -storepass 123456