java - 如何从 AWS Certificate Manager 导出我的域证书以导入 Java keystore ?

标签 java amazon-web-services spring-boot ssl-certificate

我直接从亚马逊购买了域名“jimtough.org”,因此我可以将它与 Cloudfront 发行版一起使用。现在我在 https://jimtough.org/ 有一个非常简单的虚荣心网站使用证书。我还尝试了 AWS API Gateway,并确认我可以使用相同的证书来提供 HTTPS 安全 URL 以与 API Gateway 配合使用。
我还在 EC2 服务器上运行 Java/Spring Boot Web 应用程序。我已经将 Route53 DNS 名称与托管我的 Spring Boot 应用程序的 EC2 服务器相关联,如下所示:http://instance-b.jimtough.org/ .这有效,但它使用的是不安全的 HTTP。当我尝试在应用程序中进行基本身份验证时,我收到一堆警告,因为它会通过不安全的连接发送我的用户名/密码。很公平。
所以我的下一步是在 Spring Security 中启用 HTTPS 并强制安全连接到应用程序。为此,我首先需要提供一个证书,供 EC2 主机上的 Java 运行时使用。我找到了如何执行此操作的示例 带有自签名证书 :

  • https://mkyong.com/spring-boot/spring-boot-ssl-https-examples/
  • https://www.baeldung.com/spring-boot-https-self-signed-certificate

  • 不幸的是,使用自签名证书并不是我想要的。我希望用户能够首先浏览我的静态内容虚荣站点 ( https://jimtough.org/ ),然后点击指向我的 Web 应用程序的链接,并继续为我的 Spring Web 应用程序使用相同的站点证书(我的 AWS 颁发的证书)。
    问题:如何将 AWS 颁发的证书用于基于 Java 的 Web 应用程序?
    在 AWS Certificate Manager ( https://console.aws.amazon.com/acm/home?region=us-east-1#/ ) 中,我看不到任何“导出”或保存我的证书的方法。我错过了什么吗?也许亚马逊不希望我在他们自己的服务之外使用这个证书?
    请注意,我最初确实将证书的域名设置为“jimtough.org”,并将“其他名称”字段设置为“*.jimtough.org”,因此我可以在尝试时在子域上使用该证书这里。

    编辑
    来自 julien-b 的公认答案是正确的。我做了更多的研究,发现 SSL 证书并不便宜,而且有不同的风格。最便宜的是“DV”(域验证)类型,它仅验证 SSL 证书是否由同时控制关联域(例如“mydomain.com”)的 DNS 记录的人控制。可以颁发更彻底(且昂贵)的证书类型,颁发者必须对所属组织进行背景调查。这些适用于处理电子商务、金融交易等的网站。完全不是我需要的。
    还有多种类型的多站点证书可供选择。最便宜的单域证书仅涵盖您的主域和“www”子域(mysite.com 和 www.mysite.com)。如果您希望涵盖主域的所有子域(app.mysite.com、ftp.mysite.com 等),那么您需要一个“通配符”证书。那些要贵得多。更奇特的证书类型可以覆盖多个不同的域。这些似乎旨在使管理许多不同域并且不需要为每个域使用不同证书的组织更容易进行证书管理。不是我需要的,所以我没有进一步调查。
    我决定使用 Comodo 的“带有子域通配符的单域”证书(最近更名为 Sectigo?),他现在似乎是最实惠的证书供应商。
    引用:https://www.techradar.com/news/best-ssl-certificate-provider
    亚马逊似乎错失了一个机会,因为他们不参与这个游戏并收费发行自己的 SSL 证书。 AWS 已经拥有所有的基础设施,至少对于 DV 级别的证书是这样。

    最佳答案

    您无法导出公开信任的 ACM 证书的私钥。您可以将 ACM 证书用于某些托管服务,但它不适用于所有用例。
    https://docs.aws.amazon.com/acm/latest/userguide/export-private.html

    AWS Certificate Manager is integrated with other AWS services, so you can provision an SSL/TLS certificate and deploy it with your Elastic Load Balancer, Amazon CloudFront distribution or API in Amazon API Gateway. AWS Certificate Manager also works with AWS Elastic Beanstalk and AWS CloudFormation for public email-validated certificates to help you manage public certificates and use them with your applications in the AWS Cloud.


    https://aws.amazon.com/certificate-manager/features/?nc=sn&loc=2
    如果您想在未与 ACM 或什至本地集成的服务上使用证书,您应该从其他来源获取您的证书。
    至于 ACM 私有(private) CA,它旨在在组织内使用,因此与您的用例不匹配。
    https://docs.aws.amazon.com/acm-pca/latest/userguide/PcaWelcome.html

    关于java - 如何从 AWS Certificate Manager 导出我的域证书以导入 Java keystore ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65374340/

    相关文章:

    java - 将来自多个 HashMap 的值合并到一个列表中

    java - 如何找出Java中Connection对象的设置登录超时时间?

    amazon-web-services - AWS Elastic Load Balancing 和 Auto Scaling 之间的区别

    java - 类路径资源中定义的“springSecurityFilterChain”通过工厂方法实例化失败;

    java - 批量保存 JPA 实体 - TransactionRequiredException

    spring - 从 Spring websocket stomp 服务器断开客户端 session

    java - Java 语言规范中的静态方法和类型参数

    java - 反转字符串的顺序

    ios - 桥接 header 将框架导入 View Controller

    python - AWS Elastic BeansTalk Django cronjob post 请求返回 403 错误