【发布时间】:2020-06-09 16:16:21
【问题描述】:
我们有一个 AngularJS 应用程序,其中我们有一个 nodejs 应用程序,它仅在 HTTPS 端口为 443 时为服务主机名创建证书和密钥。然后在 nginx 中使用创建的证书,如下所示:
<% if ENV["HTTPS__ENABLED"] == "true" %>
listen <%= ENV["HTTPS__PORT"] %> ssl;
# These files are generated by the node app
ssl_certificate /cert.csr;
ssl_certificate_key /tls_private_key.csr;
ssl_protocols TLSv1.2;
<% end %>
但是当我在路由中设置 443 端口并重新加密终止时,在访问应用程序时会出现以下错误
Application is not available
The application is currently not serving requests at this endpoint. It may not have been started or is still starting.
请求甚至没有到达 pod。如果我创建带有边缘终止的路由会给出错误
400 Bad Request
The plain HTTP request was sent to HTTPS port
与边缘终止一样,从路由器到 pod 没有加密。 我不能使用直通终止策略,因为我们的路径中有直通终止不支持的路径。
谁能告诉我如何在 openshift 4.3 中实现端到端加密。我们在这里不使用自定义域。
我正在检查创建重新加密路由的方式
oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.com
但是由于我们没有使用自定义域,我们的路由应该使用默认证书和密钥,对吗?所以不需要提供这些权利吗?我不知道如何为这条路线创建 --dest-ca-cert 。
【问题讨论】:
-
在您的情况下,重新加密是正确的方法。您可以为您的重新加密路由添加
oc get route <name-of-route> -o yaml的输出,从而为您提供“应用程序不可用”错误吗?此外,您应该能够运行oc create route reencrypt --service=frontend --dest-ca-cert=destca.crt来创建此路由,其中“destca.crt”是您的 NGINX“/cert.csr”中用于您的证书的 CA 的证书,这行得通吗?如果不是,错误信息是什么? -
这是路由的yaml----->主机:mts-test.mts-trep-78cduhduc7388d9333-0000.us-south.containers.appdomain.cloud 路径:/ptd-ui/端口:targetPort:ptd-ui-https tls:insecureEdgeTerminationPolicy:重定向终止:重新加密到:种类:服务名称:ptd-ui-test-service
-
@simon 如何创建 destca.crt 或者它应该与 nginx 中使用的 cert.csr 相同?
-
destca.crt应包含根 CA 证书,该证书也与您的cert.csr中的根相同。所以使用openssl从你的证书链中提取根证书。 -
@simon cert.csr 里面只有一个证书而不是一个链。这些证书和密钥是在 pod 中创建的。那么为了创建 destca 我应该从 pod 复制到我的本地机器吗?然后提取根证书?您能否提供一种从此类 csr 获取根证书的方法?
标签: encryption openshift