使用 ssl 时从 apache2 迁移到 vertx 3

Migrating from apache2 to vertx 3 when using ssl

我必须从 apache2 httpd 迁移到(java 基础)vert.x 3 服务器。可以使用 ssl.conf(缩短路径)中的以下三个证书/密钥文件成功配置 apache2 httpd:

<VirtualHost>
  ...

  SSLCertificateFile   certificate.cer
  SSLCertificateKeyFile   privatekey.key
  SSLCertificateChainFile   intermediate.cer

  ...
</VirtualHost>

浏览器毫无怨言地接受了 https 连接。

为 vert.x 3 和 运行 创建密钥库后,浏览器告诉我:

www.mydomain.com uses an invalid security certificate. 
The certificate is not trusted because the issuer certificate 
is unknown. The server might not be sending the appropriate 
intermediate certificates. 
An additional root certificate may need to be imported. 
Error code: SEC_ERROR_UNKNOWN_ISSUER 

然而,浏览器似乎收到了正确的服务器证书和中间证书。

如何找出运行良好的 apache2 httpd 配置使用的根证书(严重的 GeoTrust 根证书)? 我是否必须将其包含到 java 密钥库中?

如果是,httpd 如何找到正确的根证书 - 在哪里?

.../mozilla 文件夹是否是为服务器获取根证书的正确位置(我认为该位置仅供浏览器使用的证书)?

排除另一种解释:vertx 的 ssl 功能是否存在已知错误??

Vert.x SSL 配置可以使用 java keystoresOpenSSL 完成。它们各有利弊,但是如果您要从 Apache 迁移到 Vert.x,最短路径将使用 OpenSSL 引擎。

为了使用 OpenSSL 引擎,您的项目中需要一个额外的依赖项:

<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-tcnative-boringssl-static</artifactId>
  <version>1.1.33.Fork21</version>
</dependency>

这将允许 Netty 使用 OpenSSL 或更准确地说 BoringSSL 并因此使用现有的证书。加载证书是通过创建一个像这样的 HttpOptions 对象来完成的:

new HttpServerOptions()
  .setSsl(true)
  .setPemKeyCertOptions(
    new PemKeyCertOptions()
      .setKeyPath("privatekey.key")
      .setCertPath("certificate.cer")));

密钥存储选项配置需要私钥及其基于隐私增强电子邮件 (PEM) 文件的证书。

密钥文件必须包含封装在 PEM 块中的 PKCS8 格式的非加密私钥,例如:

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDV6zPk5WqLwS0a
...
K5xBhtm1AhdnZjx5KfW3BecE
-----END PRIVATE KEY-----

证书文件必须包含封装在 PEM 块中的 X.509 证书,例如:

-----BEGIN CERTIFICATE-----
MIIDezCCAmOgAwIBAgIEZOI/3TANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdV
...
+tmLSvYS39O2nqIzzAUfztkYnUlZmB0l/mKkVqbGJA==
-----END CERTIFICATE-----

没有对证书链的真正支持,但您可以通过访问 https://whatsmychaincert.com/ 并下载正确的链(保持 [=39] =] 未选中)。该下载将成为 certificate.cer.