JBoss部署SSL证书

申请ssl证书

首先在这里感谢各位前辈大佬们的无私奉献。
因为域名是在阿里云上注册的,所以直接在上边申请了免费的ssl证书,申请过程是傻瓜式的,直接下一步就ok。申请万之后,需要等一小会儿,之后就会提示审核通过,直接点击下载按钮,弹出证书的下载列表,因为我们是JBOSS ,所以下载Tomcat 的

如图片: Tomcat版本的ssl证书

pfx 转换 jks

这块呢因为需要用到jks的证书,在网上其实也有好多转换工具,大家可以直接百度,我呢因为一开始没搞太明白,所以在网上找到一位大佬写的代码,因为忘记存书签了,这边就不贴大佬的链接了,下面直接上代码:

package com.util;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.util.Enumeration;

/**
 * pfx 转 jks
 * @author zdgao
 *
 */
public class ConventPFXToJKS {

    public static final String PKCS12 = "PKCS12";
    public static final String JKS = "JKS";
    public static final String PFX_KEYSTORE_FILE = "E:\\temp\\certs\\cert-12.pfx";// pfx文件位置
    public static final String PFX_PASSWORD = "12345";// 导出为pfx文件的设的密码
    public static final String JKS_KEYSTORE_FILE = "E:\\temp\\certs\\jbosscert.jks"; // jks文件位置
    public static final String JKS_PASSWORD = "12345";// JKS的密码

    public static void coverTokeyStore() {
        FileInputStream fis = null;
        FileOutputStream out = null;
        try {
            KeyStore inputKeyStore = KeyStore.getInstance("PKCS12");
            fis = new FileInputStream(PFX_KEYSTORE_FILE);
            char[] pfxPassword = null;
            if ((PFX_PASSWORD == null) || PFX_PASSWORD.trim().equals("")) {
                pfxPassword = null;
            } else {
                pfxPassword = PFX_PASSWORD.toCharArray();
            }
            char[] jksPassword = null;
            if ((JKS_PASSWORD == null) || JKS_PASSWORD.trim().equals("")) {
                jksPassword = null;
            } else {
                jksPassword = JKS_PASSWORD.toCharArray();
            }

            inputKeyStore.load(fis, pfxPassword);
            fis.close();
            KeyStore outputKeyStore = KeyStore.getInstance("JKS");
            outputKeyStore.load(null, jksPassword);
            Enumeration enums = inputKeyStore.aliases();
            while (enums.hasMoreElements()) { // we are readin just one
                // certificate.
                String keyAlias = (String) enums.nextElement();
                System.out.println("alias=[" + keyAlias + "]");
                if (inputKeyStore.isKeyEntry(keyAlias)) {
                    Key key = inputKeyStore.getKey(keyAlias, pfxPassword);
                    Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
                    outputKeyStore.setKeyEntry(keyAlias, key, jksPassword, certChain);
                }
            }

            out = new FileOutputStream(JKS_KEYSTORE_FILE);
            outputKeyStore.store(out, jksPassword);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        coverTokeyStore(); // pfx to jks
    }

}

修改Jboss的配置文件

这段我是直接在阿里云上搜到的一个教程,给大家贴下地址: JBoss如何部署SSL证书.
大家可以去看看原文,不过我这边为了文章的完整性,下边直接都会拷贝过来,CV一下
1.确认jboss版本,建议您将SSL证书部署在JBoss 7.1.1及以上版本。

2.修改服务端口。进入JBoss主目录下的standalone/configuration,修改standalone.xml文件。

<interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"></inet>
        </interface>
         <!--开启远程访问-->
        <interface name="public">
            <inet-address value="${jboss.bind.address:0.0.0.0}"></inet>
        </interface>
        <interface name="unsecure">
            <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"></inet>
        </interface>
    </interfaces>
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"></socket>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"></socket>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"></socket>
        <socket-binding name="ajp" port="8009"></socket>
         <!--修改http端口-->
        <socket-binding name="http" port="80"></socket>
          <!--修改https端口-->
        <socket-binding name="https" port="443"></socket>
        <socket-binding name="osgi-http" interface="management" port="8090"></socket>
        <socket-binding name="remoting" port="4447"></socket>
        <socket-binding name="txn-recovery-environment" port="4712"></socket>
        <socket-binding name="txn-status-manager" port="4713"></socket>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"></remote>
        </outbound-socket-binding>
    </socket-binding-group>

3.进入Jboss安装目录的bin目录下,执行standalone.sh,确保应用正常访问。

4.获取证书,并转换成jks格式。

从阿里云下载tomcat格式的证书,非系统生成的CSR需要生成pfx证书密匙对文件,解压后文件包括:

214362464370691.key
214362464370691.pem
214362464370691.pfx

pfx-password.txt .非系统生成的CSR,转换pfx的证书密匙对文件为jks格式(windows环境注意在%JAVA_HOME%/jdk/bin目录下执行)。转换示例如下:

openssl pkcs12 -export -out 214362464370691.pfx -inkey 214362464370691.key -in 214362464370691.pem

回车后输入两次要设置的JKS格式证书密码,然后输入一次PFX证书密码。三次密码必须输入pfx-password.txt记录的密码。

5.部署证书。

进入JBoss主目录下的standalone/configuration,新建cer文件,将jks格式证书放入该文件夹。

#​cd /opt/jboss711/standalone/configuration
#mkdir cert
# pwd
/opt/jboss711/standalone/configuration/cert
#cp -rf /opt/keys/jboss.jks .

修改standalone.xml文件,添加证书相关配置。

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
         <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
        <connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true">
                <ssl name="https" password="214362464370691" certificate-key-file="../standalone/configuration/cert/jboss.jks" cipher-suite="TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" protocol="TLSv1,TLSv1.1,TLSv1.2"/>
            </connector>
            <virtual-server name="default-host" enable-welcome-root="true">
                <alias name="localhost"/>
                <alias name="example.com"/>
            </virtual-server>
        </subsystem>

重启Jboss服务器。进入Jboss目录下的bin目录,执行standalone.sh脚本。

#pwd
/opt/jboss711/bin
#sh standalone.sh &

验证。

以上就是阿里云的教程,不过因为SSL是要用到微信小程序中,所以个人感觉里边有个小坑。

做完上边这些操作之后呢,大家最好做一下SSL证书的测试,这个网上也是有一大堆的,个人推荐这个: SSL证书-检测.
一开始还不错,证书检测结果都通过了,但是服务器检测没通过,我也没往深处想,直接略过。
之后在服务器上直接部署程序,把同事写好的小程序上传,先生成个体验版本。
这一下,问题就出来了,ios系统的手机表示访问毫无压力,安卓的却始终不行。这问题搞了我一天时间,也是醉了,快怀疑人生了。在安卓上报 request:fail ssl hand shake error,之后在网上各种搜索,各种尝试,都没能定位问题。
最后经过同事的细心帮助,看过另一个博客 服务器配置SSL指南.再联想到之前的检测结果,PFS(完全正向保密)错误,之后按照提示,在配置文件里,做了下边的修改:

<subsystem xmlns="urn:jboss:domain:web:2.1" default-virtual-server="default-host" native="false">
            <configuration>
                <jsp-configuration development="true"/>
            </configuration>
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
			<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true">
                <ssl name="https" password="12345" certificate-key-file="../standalone/configuration/jbosscert.jks" cipher-suite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4" protocol="TLSv1,TLSv1.1,TLSv1.2"/>
            </connector>
            <virtual-server enable-welcome-root="false" name="default-host">
                <alias name="localhost"/>
                <alias name="example.com"/>
            </virtual-server>
        </subsystem>
            </connector>

做完这些之后,重新进行了一下SSL的检测,下边是我最后的检测结果
检测

检测之后重启JBOSS服务,手机测试,ok。完美!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值