java - AWS Lambda 中的相互身份验证(2 路 SSL)

标签 java amazon-web-services ssl lambda mutual-authentication

我正在为小型 PoC 构建 AWS Lambda 服务。 PoC 中的流程是:

  • 通过 POST 获取(文本)输入,
  • 执行小字符串操作 +
  • 将操纵值存储到 DynamoDB 中,然后
  • 通过 HTTP POST
  • 将相同的(操纵的)值发送到特定的 URL

    看起来像是一个简单的 lambda 教程示例,但对我来说棘手的部分是授权。我必须发布到的 URL 只允许通过 SSL 证书相互验证的请求。我怎样才能在 Lambda 中实现这一点?

    我找不到足够的答案来完成这项工作。我查看了使用 AWS API 网关 2-way ssl 证书选项。但是,为此,我需要将接收部分证书安装到证书存储中。甚至可能吗?还是唯一的方法是使用微型 EC2 盒子?

    在 Lambda,我可以使用 Node.JS、Java 或 Python。

    最佳答案

    如何在 AWS Lambda 中实现双向 TLS?
    Hakky54 为这个关于双向 TLS 的优秀教程首先鼓掌。
    https://github.com/Hakky54/mutual-tls-ssl
    我按照他的教程了解和实现 AWS Lambdas 的 MTLS。您还可以在部署到 AWS 之前在本地测试您的实现,只需运行 spring-boot 应用程序即可节省大量时间。
    步骤(所有命令都记录在上面的链接中)

  • 导出服务器证书并将其导入客户端信任库
  • 加载您的客户端 key 存储和信任存储,我将两者都保存在 s3 存储桶中
  • 创建 TLS 上下文
  • SSLContext sslContext = SSLContexts.custom()
        .loadKeyMaterial(keyStore, stores.getKeyStorePassword().toCharArray())
        .loadTrustMaterialtrustStore, (X509Certificate[] chain, String authType) -> true)
        .build();
    
  • 创建新泽西客户端
  • Client client = ClientBuilder.newBuilder()   
        .withConfig(new ClientConfig())    
        .sslContext(sslContext.get())   
        .trustStore(trustStore)
        .keyStore(keyStore, keyStorePassword)   
        .build();
    
  • 调用 API
  • client.target(endpoint).get();
    
    我将我的 keystore 凭据存储在参数存储中。

    关于java - AWS Lambda 中的相互身份验证(2 路 SSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42618931/

    相关文章:

    java - Traceview 显示某些方法在 200 毫秒或更长时间内没有被调用

    java - 无法解析最近格式化的 ZonedDateTime Java 8

    java 8 流如何在结果分组中进行分组?

    amazon-web-services - 在 CloudFormation 堆栈之间引用资源

    java - EC2-在运行的 EC2 实例上运行 jar

    SSLError Poodle 补丁 - ActiveMerchant & SayPay

    android - 是什么阻止了 Android 用户到达 s3?

    ssl - 谷歌计算引擎不可能的 SSL 证书

    java - WebSocket 在调用 HttpSessionListener.sessionDestroyed 之前关闭

    ruby-on-rails - 如何为 AWS Elastic Beans 设置多行 RSA 私钥环境变量