目的

使用CloudFront签名URL机制来实现,下载文件安全。

前提

已经为CloudFront设置好密钥组,并且启用CloudFront签名URL机制来下载s3文件选项。

Maven

...<aws.java.sdk1.version>1.12.31</aws.java.sdk1.version>
...<dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-cloudfront</artifactId><version>${aws.java.sdk1.version}</version></dependency>
...

Java

这里使用AWS for Java SDK V1的版本,V2的版本我翻了半天文档都没有找到到CloudFront怎么签名URL的,只有V1版本的Java示例代码。

package util;import com.amazonaws.services.cloudfront.CloudFrontUrlSigner;
import com.amazonaws.services.cloudfront.util.SignerUtils;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.spec.InvalidKeySpecException;
import java.util.Date;@Slf4j
public class AWSCloudFrontUtil {/*** 签名URL** @param distributionDomain 域名* @param privateKeyFile     私钥文件* @param s3ObjectKey        s3key* @param keyPairId          密钥id* @param dateLessThan       小于日期* @param dateGreaterThan    大于日期* @return 签名url*/public static String signUrl(String distributionDomain, File privateKeyFile, String s3ObjectKey, String keyPairId, Date dateLessThan, Date dateGreaterThan) {SignerUtils.Protocol protocol = SignerUtils.Protocol.https;// 中文URL处理,在s3中空格需要替换成+s3ObjectKey = s3ObjectKey.replace(" ", "+");s3ObjectKey = UriUtils.encodePath(s3ObjectKey, StandardCharsets.UTF_8);String ipRange = "0.0.0.0/0";try {return CloudFrontUrlSigner.getSignedURLWithCustomPolicy(protocol, distributionDomain, privateKeyFile,s3ObjectKey, keyPairId, dateLessThan,dateGreaterThan, ipRange);} catch (InvalidKeySpecException | IOException e) {log.error("签名url异常:", e);}return "";}
}

架构图

参考:

  • CloudFrontUrlSigner
  • 使用Amazon CloudFront签名URL+S3实现私有内容发布
  • 使用Amazon CloudFront签名URL+S3实现私有内容发布

CloudFront签名URL相关推荐

  1. 使用签名 URL 和已签名的 Cookie 提供私有内容

    许多通过互联网分发内容的公司都希望限制对文档.业务数据.流媒体或面向选定用户(例如付费用户)的内容的访问.要使用 CloudFront 安全地提供这种私有内容,可执行以下操作: 要求用户使用特殊的 C ...

  2. 存储桶上传策略和签名 URL的绕过及利用

    本文中带有自己一些拙见,读者若存在相关问题或者有其他想法的,欢迎在评论区交流探讨.原文:https://labs.detectify.com/2018/08/02/bypassing-exploiti ...

  3. 阿里云OSS获取文件强制下载的签名URL

    需求: 视频文件在后台可预览,可下载. 目前难题: 在点击下载时,OSS的签名url在浏览器中会直接播放,不提示下载 原因 : OSS在上传时未指定文件元信息.官方推荐,指定文件元信息 'Conten ...

  4. 调用阿里云OSS签名URL

    业务场景 由于项目中未来会产生大批量的音视频文件,全部存在服务器本地将会占用大量的空间:因此决定使用阿里云对象存储服务(Object Stroage Service, OSS)实现文件上云:本地只保存 ...

  5. aws签名 php,创建亚马逊AWS S3预签名URL PHP - php

    根据此链接http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html,我可以轻松地创建一个预签名链接,只需将寿命添加到getObje ...

  6. 技术讨论 | 如何绕过并利用Bucket的上传策略和URL签名

    简介 Bucket上传策略是一种直接从客户端向Bucket(存储空间)上传数据的便捷方式.通过上传策略中的规则以及与访问某些文件的相关逻辑,我们将展示如何拿到完整的Bucket对象列表,同时能够修改或 ...

  7. cloudfront s3_如何使用S3,CloudFront和Route53托管静态网站

    cloudfront s3 by Paul Berg 保罗·伯格 如何使用S3,CloudFront和Route53托管静态网站 (How to Host a Static Website with ...

  8. AWS之S3套CloudFront的CDN

    问题 需要给S3访问套一层CDN,AWS的CDN是CloudFront. 解决 主要步骤 创建公私钥密钥对 创建配置密钥组 创建CloudFront分配 测试(Java签名URL) 创建公私钥密钥对 ...

  9. php上传照片到s3云服务器,PHP上传文件到AWS S3生成下载文件URL

    * 加载s3客户端 * @return string*/ functionAWS_S3Client(){$ACCESS_KEY_ID = '你的s3 ID';$SECRET_ACCESS_KEY = ...

最新文章

  1. 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
  2. c语言中throw的用法,C中的内联throw()方法
  3. PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入
  4. mybatis 复习笔记02
  5. 【python初识】数据和对象
  6. BIOS系统服务 —— 直接磁盘服务(int 0x13)
  7. 冰墩墩+周杰伦也救不了NFT
  8. Java中List for循环的6种写法总结(推荐)(亲测)
  9. Dropbox - share your doc on the cloud
  10. 一步步编写操作系统 10 cpu的实模式
  11. 华为P30/P30 Pro细节再曝光:3.5mm耳机插孔和红外遥控各占其一
  12. oracle中正则表达式相关函数regexp_like简介
  13. LAMP默认安装路径
  14. windows下 dos 执行php 代码
  15. acm steps chapter2总结
  16. android studio创建9.patch图片,使用时出现Error: Duplicate resources
  17. redux-actions入门
  18. python开发Day10(多进程多线程补充)
  19. 易筋SpringBoot 2.1 | 第十六篇:SpringBoot通过JDBC访问数据库
  20. 基于Java毕业设计在线商城系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. 小红书如何打造优质的商品笔记?
  2. WAAS/EGNOS/MSAS/GAGAN
  3. 改善客户体验 (CX) 的 10 种方法
  4. Manjaro(kde) 安装nvidia显卡驱动(optimus-manager管理)
  5. 黑马旅游网编写练习(10)--用户收藏线路的展示功能
  6. 微信摇一摇功能的实现
  7. 阿里云图数据库GDB揭秘
  8. C语言,火柴棒等式。
  9. 股份公司代持股协议是不是算合法的
  10. 破解mifare Classic(M1)非接触式射频IC卡--Mifare crack Hack 笔记一