Tim*_*Tim 14 .net c# amazon-s3 amazon-web-services
我正在寻找在桌面应用程序中使用Amazon S3和simpleDB.
我遇到的主要问题是我需要在应用程序中存储我的aws凭据或使用其他一些方案.
我猜测将它们存储在应用程序中是不可能的,因为它们很容易被挑选出来.
另一种选择是创建一个创建aws身份验证签名的Web服务,但这有其自身的问题.签名是否需要上传文件中的所有数据?如果是这样,我将不得不两次传输所有数据.然后会出现一个中心故障点,这是使用aws的主要原因之一.
有任何想法吗?
更新:
我需要更清楚一点,我想将我的aws凭证存储在分发给他人的应用程序中.DPAPI或任何其他加密只会阻止人们使用反射器来获取凭据.使用任何加密仍然需要易于获得的密钥.
更新2 - 2011年9月
亚马逊已经发布了一些有关使用AWS Security Token Service的详细信息,该服务允许在不泄露您的密钥的情况下进行身份验证.此博客文章中提供了更多详细信息.
Ore*_*ner 10
蒂姆,你确实打了两个关键的方法:
不够好:在应用程序中"秘密"存储密钥.某人只是从应用程序代码中挑出它确实存在严重风险.一些缓解措施可能是(a)使用DPAPI将密钥存储在应用程序二进制文件之外,或者(b)每次需要时通过网络服务获取密钥(通过SSL),但绝不将其存储在本地.没有缓解可以真正减慢使用调试器的有能力的攻击者,因为明文密钥必须最终在应用程序的RAM中.
更好:将需要保护的内容推送到您的Web服务并在那里签名.好消息是只需要签名请求名称和时间戳 - 而不是所有上传的位(我猜亚马逊不想花费周期来验证所有这些位!).以下是亚马逊自己的" 针对C#开发人员的AWS简介 "中的相关代码行.请注意如何Aws_GetSignature仅使用"PutObject"和时间戳调用?您绝对可以在自己的Web服务上实现签名,而无需发送整个文件并且不会损害您的密钥.如果您想知道,Aws_GetSignature是一个9行函数,它使用您的密钥在常量字符串"AmazonS3",操作名称和时间戳的RFC822表示的串联上执行SHA1哈希.
DateTime timestamp = Aws_GetDatestamp();
string signature = Aws_GetSignature( "PutObject", timestamp );
byte[] data = UnicodeEncoding.ASCII.GetBytes( content );
service.PutObjectInline( "MainBucket", cAWSSecretKey, metadata,
data, content.Length, null,
StorageClass.STANDARD, true,
cAWSAccessKeyId, timestamp, true,
signature, null );
Run Code Online (Sandbox Code Playgroud)编辑:请注意,虽然您可以隐藏您的Amazon身份的密钥部分,但访问密钥ID部分需要嵌入请求中.除非您通过自己的网络服务发送文件,否则您必须将其嵌入应用程序中.
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |