保护Glassfish 4.0 Web应用程序

发布时间:2018/6/6 13:55:31 打印 字号:

certificate-error.png

上面的图片是开发新的Web应用程序时的常见场景,对于内部开发机器来说是完美的,但是当部署它时就不会这样做。

本文将通过应用由受信任的第三方签名的证书所需的步骤来保护我们的Web应用程序。

先决条件

本文将假设您已经拥有以下内容:

  • 一个注册的域指向运行Glassfish 4.0的服务器。

  • 部署到该glassfish实例的Web应用程序

为了本文的目的,我会假装我们已经注册了domain.com如果您正在执行这些步骤,请确保将domain.com的任何实例替换为您自己的域。

我鼓励你在阅读说明之前阅读整篇文章,现在让我们开始保护玻璃鱼。

第1步:证书签名请求

第一步是生成我们的签名请求并将其提交给可信的第三方,确切的步骤可能因供应商而异。我们从Oracle Linux主机为GoDaddy执行了这些步骤。如果可能的话,从要安装证书的主机执行步骤,这将降低您的私钥的风险,因为我们将不必稍后进行传输。

访问Linux机器的控制台并在终端提示符处:

  • openssl req -new -newkey rsa:2048 -nodes -keyout domain .key -out domain .csr

在生成请求之前,OpenSSL会问我们几个问题。重要的是这些答案是正确的,或者权威机构可能会拒绝该请求。

  • 通用名:这是完全合格的域名,domain.com 如果您购买了通配符证书,然后使用* .domain.com代替

  • 组织:拥有该域名的企业的名称。如果你是一个人,你应该把你的名字放在这里

  • 组织单位:这是公认的商业名称,所以我们在这里使用'borwell'而不是'borwell Ltd'

  • 城市或地区:这应该是您的企业注册所在城市的全名

  • 州或省:这应该是您的企业注册所在州的全名

  • 国家:您所在的国家/地区的两个字母ISO国家代码。您可以在此处找到代码列表https://www.iso.org/obp/ui/#search/code/

如果您需要使用CSR质询密码,请咨询您的证书颁发机构。质询密码仅对签名请求进行加密。挑战密码用于加密您的签名请求,并且必须以某种方式提供给您的权限供他们解密。此时您的私钥将被解密。

一旦OpenSSL命令完成,您将有两个文件domain.keydomain.csr都是文本文件。你可以继续打开它们。

Domain.key是您的私钥。保持安全是非常重要的,因为攻击者可能冒充您的服务器或解密您与您的应用程序客户端之间的流量。

Domain.csr是签名请求和您的公钥。我们会将此发送给当局进行验证和签署(从而引入第三方信任)。

在这一点上,我们将domain.csr(无论是文件还是文本形式)上传到权威机构。请参阅他们自己的说明。我们必须等待一天左右,而他们验证您拥有域名(没有冲过他们,这是基于证书的信任的重要组成部分)。

完成此操作后,您的权限将使您的签名证书可供下载,并且还应该包括他们已经引入链中的任何中间证书。

第2步:将签名的公钥与您的私钥和CA链结合在一起

在这一步中,我们将把所有文件合并成一个Java密钥库,以便Glassfish可以使用它们。

这一步将专门处理GoDaddy提供给我们的一组文件。如果您与另一个权威机构打交道,但可能需要修改这些步骤,但目标应该是相同的。

首先你应该有以下文件:

  • 键(来自步骤1)

  • crt(您的公钥,从GoDaddy下载;确切的文件名将会有所不同)

  • crt(中级CA证书,从GoDaddy下载)

  • gd_bundle-g2-g1.crt(从GoDaddy下载的另一个CA证书)

将文件放入您的glassfish域配置目录$ GLASSFISH_DIR / glassfish / domains / domain1 / config其中$ GLASSFISH_DIR是glassfish安装目录。

在提示处将您的公钥与中间CA组合起来:

  • cat 27faeb87fgeg.crt gdig2.crt> domain-g2.crt

接下来使用OpenSSL将您的公共包与您的私钥相结合,将密码设置为'changeit'。

  • openssl pkcs12 -export -in domain-g2.crt -inkey domain.key -out domain-g2.p12 -name domain.com

最后使用keytool将公共/私人对导入glassfish的密钥库。

  • keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore keystore.jks -srckeystore domain-g2.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias  domain.com

关于密钥库密码的说明

在最后一条命令中,我们在命令行上传递了一些密码。所有这些都是'changeit'。这是glassfish使用的默认密钥库密码,因此如果您以前未修改glassfish的安全设置,该命令应该可以正常工作。如果您已给Glassfish一个新的主密码,请在'deststorepass'和'destkeypass'字段中使用此代替'changeit'。

在创建domain-g2.p12文件时,您将被要求通过OpenSSL设置密钥库密码。我们再次使用'changeit'来简化,但您可以使用任何东西。用执行keytool命令时使用的密码替换'srcstorepass'。

第3步:配置glassfish在通过HTTPS进行通信时使用您的新证书

在这一步中,我们将告诉Glassfish使用我们的证书。

打开管理员控制台(默认端口4848)并导航到安全监听器的SSL设置选项卡(默认情况下,这是http-listener-2):

ssl-settings-tree.png

该页面应该看起来像下一张图片:

default-security.png

我们在这里需要更改的是证书昵称。它将默认为's1as',这是Glassfish的自签名证书。

继续并将其更改为domain.com这是glassfish在从keystore.jks文件中提取密钥对时使用的查找。在这种情况下,domain.com是我们在导入密钥对时作为-alias传递的值。

点击保存并重新启动glassfish进程。一旦它重新联机,你应该发现你的应用程序在通过https访问时提供新的签名证书(端口号可以在http-listener-2设置的常规选项卡上找到,默认为8181)例如https://domain.com: 8181

结论和下一步

按照这篇文章,我们现在应该有一个Glassfish服务器托管具有可信证书的Web应用程序。我们不应该再收到来自浏览器的更多安全警告。

接下来,我们要修改传入的请求,因此我们不需要包含端口,并锁定密码使用以提高安全性。这些将成为未来文章的主题。

祝好运,您的网络安全得到改善,您现在已经完成了glassfish的保护!