本文讲述了如何使用 openssl 制作证书、keytool生成证书申请并将证书导入证书库、如何配置tomcat,和配置当中出现问题的解释。本文用到的工具:OpenSSL.rar(点击下载);keytool(JDK中自带的工具)。

这里下载的OpenSSL.rar,其中的openssl.cnf并没有在ssl文件夹中,需新建ssl文件夹并把openssl.cnf放入其中。

使用 openssl 生成根证书生成

  1. 下载安装openssl、Tomcat

    下载openssl后,放到任意目录下,然后命令行进入安装目录下的bin目录

    安装Tomcat详见:Windows上Tomcat服务器的搭建

  2. 生成根证书的私钥,生成文件cakey.pem

    openssl genrsa -out cakey.pem 1024

    屏幕快照 2016-08-01 21.30.19.png

  3. 根据私钥生成证书申请,生成文件careq.csr

    openssl req -new -out careq.csr -key cakey.pem

    若出现以下情况,则需要输入

    set OPENSSL_CONF=C:\code\OpenSSL\ssl\openssl.cnf

    屏幕快照 2016-07-31 10.47.39.png

    然后再执行之前的命令效果如下:

    屏幕快照 2016-07-31 10.52.29.png

    接着根据提示填写信息:

    屏幕快照 2016-07-31 10.56.02.png

  4. 根据根证书申请生成自签名根证书,生成文件cacert.pem

    openssl x509 -req -in careq.csr -out cacert.pem -signkey cakey.pem -days 3650

    屏幕快照 2016-07-31 10.59.39.png

    至此根证书制作完毕。

生成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地址,否则部署后会提示 证书不匹配的错误

    剩余的部分必须和根证书填写一致。

    屏幕快照 2016-07-31 11.11.14.png

    如果出现:'keytool' 不是内部或外部命令 也不是可运行的程序

    将jdk目录下的keytool.exe文件,复制到Windows/systems32目录下。

  1. 根据证书库文件生成证书申请,生成文件certreq.cer

    keytool -certreq -alias tomcat -sigalg “MD5withRSA” -file certreq.cer -keypass 123456 -keystore tomcatkey.jks -storepass 123456

    屏幕快照 2016-07-31 11.14.23.png

制作服务器证书并导入证书库

  1. 用根证书签名证书申请生成根证书,生成文件tomcatcert.pem

    openssl ca -keyfile cakey.pem -cert cacert.pem -in certreq.cer -out tomcatcert.pem -config openssl.cnf -policy policy_anything

    屏幕快照 2016-07-31 11.18.29.png

    证书可能失败,原因是openssl证书数据库中已经存储了这个证书,错误输出:

    屏幕快照 2016-07-31 11.20.04.png

    解决办法是在目录openssl/democa/index.txt,把内容清空,查看大小为0KB,这个做法会把已有的证书删除但是这个做法比较危险,有耐心可以找到那条记录并删除它,然后重新执行

  2. 转pem格式为cer格式,生成文件cacert.cer,tomcatcert.cer

    由于原有的格式都是pem格式,在导入证书库之前(即导入jks文件)需要转换成cer格式

    openssl x509 -in cacert.pem -out cacert.cer

    openssl x509 -in tomcatcert.pem -out tomcatcert.cer

    屏幕快照 2016-07-31 11.24.26.png

  3. 将转换成功的cer文件导入证书库文件中

    导入根证书:

    keytool -keystore tomcatkey.jks -import -alias RootCA -file cacert.cer

    屏幕快照 2016-07-31 11.25.37.png

    导入服务器证书:

    keytool -keystore tomcatkey.jks -import -alias tomcat -file tomcatcert.cer

    屏幕快照 2016-07-31 11.27.15.png

    到这里,证书制作成功。

Tomcat配置

  1. server.xml

    打开tomcat安装包,打开conf,打开server.xml文件,找到,默认被注释掉的,修改如下:

    <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:/code/tomcatkey.jks" keystorePass="123456" />

    端口设置为默认端口443,这样就可以直接访问了,不用添加端口号了

    clientAuth 表示是否双向认证,一般情况下,这里只需要服务器认证,所以false即可。

    keystoreFile 表示证书地址(相对地址或绝对地址皆可),keystorePass 与之前设置的密码一致。

  1. 启动tomcat,在浏览器中输入https://ip,此时浏览器会提示不安全的连接,直接进入地址栏会出现证书错误的提示,点击错误区域按照提示安装证书。或者 Inernet选项-内容-证书-受信任的根证书颁发机构-导入,选中之前的cacert.cer和tomcatcert.cer,就ok了

iOS设备访问安装页面

  1. 在ios设备的safiri中输入页面地址,点击安装连接时会提示 无法连接到xxx.xxx.xxx.xxx,那是因为safiri没有安装证书信任此连接,所以要先安装证书,才能正常。

  2. 在APP下载页面上添加证书下载链接,链接指向cacert.cer的地址,设备会自动跳转到安装步骤,按照步骤完成安装就可以了,注意最后证书上要有绿色的信任标记才表明安装成功,如果是红色叉号表面安装失败。

  3. 安装成功后就可以使用无线安装app了。