在Dropwizard中设置SSL

时间:2016-01-25 21:30:27

标签: java ssl https keystore dropwizard


我正在尝试在Dropwizard服务器中设置SSL。我从GoDaddy获得了SSL,并收到了一些来自他们的文件:

  1. gd_bundle-G2-g1.crt
  2. b78 *********。crt(基本上是一个名为随机字符串的文件)
  3. 我已在我的密钥库中添加了带有别名 root gd_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
    

    问题在于,每当我尝试启动服务器时,都会收到以下错误:

    java.lang.IllegalStateException: Unable to retrieve certificate chain
    

    当我在上面的.yml中将 validateCerts 设置为false时,由于显而易见的原因,此错误消失但是当我尝试访问该URL时,我得到: Connection closed error when trying to access the URL 我好像很难受。我的服务器与http完美配合,但https只是不起作用! :( 鉴于我的最终目标是使https工作和我当前的场景,我有以下问题:

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

2 个答案:

答案 0 :(得分:6)

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

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

    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包含到我的密钥库中:
    2.   

      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文件稍作修改:
      2. server:
          applicationConnectors:
          - type: http
            port: 8080
          - type: https
            port: 8443
            keyStorePath: ./keystore/myKeyStore.jks
            keyStorePassword: "myPassword"
            validateCerts: false
            validatePeers: false
        

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

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

答案 1 :(得分:2)

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

首先生成密钥:

 keytool -genkey -alias <aliasname> -keyalg RSA -keystore keystore.jks -keysize 2048

然后生成您的CSR:

 keytool -certreq -alias <aliasname> -file csr.txt -keystore keystore.jks

打开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

然后在你的.yml文件中,让我们:

  applicationConnectors:
- type: http
  port: 8080
- type: https
  port: 8443
  keyStorePath: keystore.jks
  keyStorePassword: <keystorepassword>
  keyStoreType: JKS
  supportedProtocols: [TLSv1, TLSv1.1, TLSv1.2]

就是这样,玩得开心!