在Dropwizard中设置SSL

San*_*try 4 java ssl https keystore dropwizard


我想在我的Dropwizard服务器中设置SSL .我从GoDaddy获得了SSL,并从他们那里收到了几个文件:

  1. gd_bundle-G2-g1.crt
  2. b78*********.crt(基本上是一个名为随机字符串的文件)

我在我的密钥库中添加了带别名rootgd_bundle-g2-g1.crt证书,并添加了另一个带有我的域别名的证书.

我的.yml配置文件如下所示:(我刚刚粘贴了.yml文件的相关部分)

server:
  applicationConnectors:
  - type: http
    port: 8080
  - type: https
    port: 8443
    keyStorePath: keystore/myKeyStore.jks
    keyStorePassword: "myPassword"
    validateCerts: true

  adminConnectors:
  - type: http
    port: 8081
Run Code Online (Sandbox Code Playgroud)

问题是,每当我尝试启动我的服务器时,我收到以下错误:

java.lang.IllegalStateException: Unable to retrieve certificate chain
Run Code Online (Sandbox Code Playgroud)

当我在上面的.yml 中将validateCerts设置为false时,由于显而易见的原因,此错误消失但当我尝试访问URL时我得到: 尝试访问URL时连接已关闭错误
我似乎陷入了真正的糟糕状态.我的服务器与http完美配合,但https只是不起作用!:(鉴于我的最终目标是使https工作和我当前的场景,我有以下问题:

  1. 我是否错误地处理了证书文件?
  2. 我的.yml文件中是否缺少需要添加的内容或者是否存在错误?
  3. 或者这是我在这张照片中完全遗漏的东西?

感谢您的帮助.

San*_*try 7

问题终于解决了!以下是我如何使用它(希望这有助于任何人很难找到如何使用Dropwizard进行SSL工作)

  1. 首先,我不得不来连接的内容b78*********.crtgd_bundle-g2-g1.crt(确保的内容b78*********.crt是其他文件之前).让我们从现在开始将该文件称为all_combined.crt.
  2. 然后我必须运行此命令来生成.p12文件:

C:\ xampp\apache\bin> openssl.exe pkcs12 -export -in all_combined.crt -inkey myKey.key -out keystore.p12 -CAfile temp.crt

myKey.key是生成CSR以从权限请求SSL时必须创建的文件.

  1. 然后我必须运行此命令将上面的生成.p12包含到我的密钥库中:

C:\ Program Files\Java\jdk1.8.0_65\bin\keystore> ..\keytool.exe -importkeystore -srckeystore keystore.p12 -destkeystore myKeyStore.jks -srcstoretype pkcs12 -deststoretype jks

这就是密钥库中所需的全部内容.

  1. 最后我在.yml文件中稍作修改:
server:
  applicationConnectors:
  - type: http
    port: 8080
  - type: https
    port: 8443
    keyStorePath: ./keystore/myKeyStore.jks
    keyStorePassword: "myPassword"
    validateCerts: false
    validatePeers: false
Run Code Online (Sandbox Code Playgroud)

请注意,我已将validateCerts和validatePeers设置为false.然后我重新启动了我的Dropwizard服务器,一切都按预期开始工作,我的服务器正在监听并响应端口8443!:-)

PS:我不是100%确定每个步骤的作用或是否需要每个步骤.但是经过几个小时的搜索,我终于有了一些工作,当我有一段时间的时候,肯定会读到这个细节.然后希望这会阻止那些坚持下去的人.


Gui*_*uto 5

对于其他人,我以另一种方式在 Dropwizard/Linux 中解决了这个问题。

首先生成您的密钥:

 keytool -genkey -alias <aliasname> -keyalg RSA -keystore keystore.jks -keysize 2048
Run Code Online (Sandbox Code Playgroud)

然后生成您的 CSR:

 keytool -certreq -alias <aliasname> -file csr.txt -keystore keystore.jks
Run Code Online (Sandbox Code Playgroud)

打开您的 csr.txt 并复制所有内容。转到 GoDaddy 粘贴它并将两个 .crt 文件下载为其他文件。

然后将 b78************.crt 和 gd_bundle-g2-g1.crt 的内容连接起来(确保 b78************.crt 的内容在其他文件之前)。从现在开始,我们将该文件称为 all_combined.crt。

最后将您的信任证书与您的 .jks 结合起来:

keytool -import -trustcacerts -keystore keystore.jks -storepass <keystorepassword> -alias <aliasname> -file all_combined.crt
Run Code Online (Sandbox Code Playgroud)

然后在你的 .yml 文件上让这个:

  applicationConnectors:
- type: http
  port: 8080
- type: https
  port: 8443
  keyStorePath: keystore.jks
  keyStorePassword: <keystorepassword>
  keyStoreType: JKS
  supportedProtocols: [TLSv1, TLSv1.1, TLSv1.2]
Run Code Online (Sandbox Code Playgroud)

就是这样,玩得开心!