9

我正在尝试将 ASP.NET Core 2 Web 应用程序部署到 AWS Elastic Beanstalk。

该应用程序实际上是 IdentityServer4,我需要访问一个证书来签名和验证令牌。

这里有一个如何为 Azure Web 应用程序配置证书使用的教程,但我没有找到任何与 AWS 类似的东西。

无论我搜索 AWS 及其证书,我总能找到有关 HTTPS 的 SSL/TLS 连接的文章和文档。我知道如何执行此操作并将单独执行此操作,我已经在 AWS Certificate Manager 中提供了一个证书,我可以在 Elastic Beanstalk 中为负载均衡器设置它,但 ACM 文档指出:

  • ACM 不提供 SSL/TLS 协议以外的任何证书。
  • 您不能将 ACM 证书用于代码签名或电子邮件加密。

因此,如果我想在我的代码中使用证书,似乎 ACM Cert 并不适用于此。

我可以使用 OpenSSL 创建自签名证书,但我不知道从 Elastic Beanstalk 实例中的 ASP.NET Core 2 Web 应用程序访问它的最佳方式是什么。我无法将证书文件放在我的代码存储库中,我想以某种方式通过 AWS 将其注入环境,但我不知道在我的应用程序中的何处或如何访问它?

4

1 回答 1

0

我也浪费了一些时间来寻找它。

我最终做的是将证书的 base64 和证书密码存储在 Secrets Manager 中,并在 Startup 使用Kralizek 的 AWSSecretsManagerConfigurationExtensions读取应用程序。

private X509Certificate2 CreateSigningCredential()
{
    if (_signingCertificate != null)
        return _signingCertificate;

    var certBytes = Configuration.GetValue<string>("Auth:Certificate");
    if (string.IsNullOrEmpty(certBytes))
    {
        return null;
    }

    var password = Configuration.GetValue<string>("Auth:CertificatePassword");
    if (string.IsNullOrEmpty(password))
    {
        return null;
    }

    var certificate = Convert.FromBase64String(certBytes);
    _signingCertificate = new X509Certificate2(certificate, password);

    return _signingCertificate;
}
于 2020-03-13T12:30:40.540 回答