在 Dropwizard 中设置 SSL
Setting up SSL in Dropwizard
我正在尝试在我的 Dropwizard 服务器中设置 SSL。我从 GoDaddy 获得了我的 SSL,并从他们那里收到了几个文件,即:
- gd_bundle-g2-g1.crt
- b78*********.crt(基本上是一个随机字符串命名的文件)
我在我的密钥库中添加了 gd_bundle-g2-g1.crt 别名 root 的证书,并添加了另一个使用我的域别名。
我的 .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 工作的最终目标和我当前的情况,我有以下问题:
- 我是否错误地处理了证书文件?
- 我的 .yml 文件中是否缺少需要添加的内容或那里有什么问题?
- 还是我从这张照片中完全遗漏了什么?
感谢您的帮助。
问题终于解决了!这是我如何让它工作的(希望这可以帮助那些很难弄清楚如何使 SSL 与 Dropwizard 一起工作的人)
- 首先我必须连接
b78*********.crt
和 gd_bundle-g2-g1.crt
的内容(确保 b78*********.crt
的内容在另一个文件之前)。从现在开始,我们将该文件称为 all_combined.crt。
- 然后我不得不运行这个命令来生成一个.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 时必须创建的文件。
- 然后我不得不 运行 这个命令将上面生成的 .p12 包含到我的密钥库中:
C:\Program Files\Java\jdk1.8.0_65\bin\keystore>..\keytool.exe -importkeystore -srckeystore keystore.p12 -destkeystore myKeyStore.jks -srcstoretype pkcs12 -deststoretype jks
这就是密钥库中所需的全部内容。
- 最后我对.yml文件做了一点改动:
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% 确定每个步骤的作用或是否需要每个步骤。但是在搜索了几个小时之后,我终于找到了可以工作的东西,并且肯定会在以后有空的时候阅读有关详细信息的信息。到那时希望这能解除对卡住的人的封锁。
对于其他人,我在 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 文件作为 Others。
然后拼接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]
就是这样,玩得开心!
我正在尝试在我的 Dropwizard 服务器中设置 SSL。我从 GoDaddy 获得了我的 SSL,并从他们那里收到了几个文件,即:
- gd_bundle-g2-g1.crt
- b78*********.crt(基本上是一个随机字符串命名的文件)
我在我的密钥库中添加了 gd_bundle-g2-g1.crt 别名 root 的证书,并添加了另一个使用我的域别名。
我的 .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 工作的最终目标和我当前的情况,我有以下问题:
- 我是否错误地处理了证书文件?
- 我的 .yml 文件中是否缺少需要添加的内容或那里有什么问题?
- 还是我从这张照片中完全遗漏了什么?
感谢您的帮助。
问题终于解决了!这是我如何让它工作的(希望这可以帮助那些很难弄清楚如何使 SSL 与 Dropwizard 一起工作的人)
- 首先我必须连接
b78*********.crt
和gd_bundle-g2-g1.crt
的内容(确保b78*********.crt
的内容在另一个文件之前)。从现在开始,我们将该文件称为 all_combined.crt。 - 然后我不得不运行这个命令来生成一个.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 时必须创建的文件。
- 然后我不得不 运行 这个命令将上面生成的 .p12 包含到我的密钥库中:
C:\Program Files\Java\jdk1.8.0_65\bin\keystore>..\keytool.exe -importkeystore -srckeystore keystore.p12 -destkeystore myKeyStore.jks -srcstoretype pkcs12 -deststoretype jks
这就是密钥库中所需的全部内容。
- 最后我对.yml文件做了一点改动:
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% 确定每个步骤的作用或是否需要每个步骤。但是在搜索了几个小时之后,我终于找到了可以工作的东西,并且肯定会在以后有空的时候阅读有关详细信息的信息。到那时希望这能解除对卡住的人的封锁。
对于其他人,我在 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 文件作为 Others。
然后拼接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]
就是这样,玩得开心!