Azure PaaS服务,比如存储,Redis缓存,服务总线,IoT中心等等,一般通过密钥来认证客户端,也就是说只有提供正确密钥的客户端才能访问和使用对应的Azure PaaS服务,所以这个密钥是很重要很重要的,那么该如何来保证密钥的安全性呢?接下来将以问答的形式来阐述。

问:密钥能否被暴力破解?

答:我们先看看几个密钥的例子来分析密钥的组成。

存储账户

5+kWqp1jIGQdGPVp6o7pgT/8DlRYnE55jJbxh51h7WHU4yGqAbMYdCYbSfR2CaFsi1/pfmL+d/QJbeAmDn6FQg==

Redis

R4W4Ol+yHUJ9Z25VHSrQdn9sGw9ApNe00EvpvVXn05Y=

服务总线

/TCLOykE3mgZ8Lxe2/N7VAZAo3pSn5K48y54Xoss4Pw=

IoT中心

xv8FF7ja0QpPHcWE9B1wB3Ge7pLyj0ZvickxQAOdk/Y=

可以看到一般情况下密钥的长度是44个字符,其中存储比较特殊有88个字符。而构成有以下这些元素:

-         字母,而且大小写敏感 (a - z,A - Z)

-         数字(0 - 9)

-         特殊字符(/,+,=)

考虑到字符‘=’只是用做结尾,因此我们计算出一般情况下密钥的可能性有:

(26*2 + 10 + 2)^44 = 64^44

也就是64的44次方,而存储账户更是多达64的88次方。这种情况下要暴力破解,可能性实在太低。

问:密钥是否会在传输的过程中被截取?

答:客户可能会有这样的疑问,在客户端使用Azure PaaS的SDK时,一般需要提供连接字符串,或者是密钥直接作为参数,感觉密钥就跟普通的用户名密码一样,会被传输到服务端来做对比验证,因此觉得密钥有可能在传输过程中被截取。

首先,所有的传输都是加密的(SSL\TLS)。但这还不是关键点,更关键的是,密钥其实压根就不会被传输,被用来传输和验证的是令牌(Token)。也就是说SDK拿到提供的密钥,会根据密钥生成相应的令牌,再传输令牌到服务端做验证。而令牌本身是被限制了访问范畴和生命周期的,因此比起密钥的安全性会高得多。

问:在客户端,密钥无论是明文写在代码里,还是配置文件中,都不安全,有没有更安全的方式?

答:当然有。就跟生活中把贵重物品放在保险箱里一样,我们也可以把密钥放在保险箱里。Azure密钥保管库就是这样一个服务,可以将密钥保存到其中,授权的客户端在需要的时候再从中获取。这样的话,既使得密钥能被集中管理,而且能使密钥管理者和使用者分离,提高了安全性的同时,更提供了便捷性。更多了解Azure密钥保管库,可参阅以下文章:

-         Azure密钥保管库介绍

-         Azure密钥保管库入门

-         Azure密钥保管库使用

那么除了这种方式之外,还有没有别的办法呢?上一个问题中我们提到通过令牌来认证,也就是说客户端其实不一定要知道密钥,它只要能提供正确的令牌就可以了,因此我们可以创建一个专门生成令牌的集中管理服务,授权的客户端只需要调用这个服务,就可以拿到目标资源的访问令牌,这样也可以避免密钥被客户端显示的知道。当然这种方法需要自己创建一个专门生成令牌的服务,所以比起使用Azure密钥保管库的方式要复杂些。

Azure PaaS服务密钥的安全性的更多相关文章

  1. devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务

    使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...

  2. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)

    作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https ...

  3. 【Azure Redis 缓存】由Azure Redis是否可以自定义密码而引申出Azure PaaS的Redis服务是否可以和自建的Redis进行主从配置呢?

    问题描述 在自建的Redis服务中,可以通过 config set requirepass <Password> 设置Redis的登录密码,然后使用auth 命令输入密码.操作命令如下: ...

  4. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...

  5. Microsoft Azure File 服务简介

    我们非常高兴地宣布在微软Azure中国区推出 Microsoft Azure File 服务预览版.Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现 ...

  6. Azure认知服务之Face API上手体验

    Azure认知服务:Face API Face API是Azure认知服务之一,Face API有两个主要功能: 人脸检测 Face API可在图像中以高精度人脸位置检测多达64个人脸.图像可以通过文 ...

  7. 技术博客:Azure 认知服务

    Azure 认知服务 1.概述 ​ 微软认知服务(Microsoft Cognitive Services)集合了多种智能API以及知识API,使每个开发人员无需具备机器学习的专业知识就能接触到 AI ...

  8. Azure 媒体服务可将优质内容传输至 Apple TV

    作为内容提供商,如果想要将优质内容传输到Apple TV,需要使用Apple FairPlay Streaming (FPS)技术. 但是这个技术的构建比较繁琐,基于此,Azure提供了FairPla ...

  9. 玩转Windows Azure存储服务——网盘

    存储服务是除了计算服务之外最重要的云服务之一.说到云存储,大家可以想到很多产品,例如:AWS S3,Google Drive,百度云盘...而在Windows Azure中,存储服务却是在默默无闻的工 ...

随机推荐

  1. sql备份(导出脚本)

    第一步: 右键需要备份的数据库(这里以MyDB为例)-->任务-->生成脚本

  2. jquery页面水印插件,支持多行水印、行错开

    最近工作需求,需要在页面上加水印,但发现网上示例无法满足我的需求,所以还是自己动手写. 有几个特别需求: 1.可以写多行水印,并且中心对齐. 2.每行水印错开. PS:我找到的例子都是单行水印,所以用 ...

  3. 初识Tensorboard

    1.什么是Tensorboard? PPT设计原则中有这样一条,叫"文不如表,表不如图",可见图表在表达中更为直观.明确.程序设计中也是一样,我们经常用图表来描述程序的结构和流程, ...

  4. JS 点击复制按钮 将文字复制到手机剪贴板

    我们在制作移动端网页的时候,经常会遇到这样一个问题,如何点击一个"复制"按钮,把一串文字复制到手机剪贴板,如上图所示. 看了网上的一些方法后,感觉那些方法都太复杂,有点要用插件,有 ...

  5. JS中函数参数值传递和引用传递

    也许大家对于函数的参数都不会太在意,简单来说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样.深入研究,你会发现其实没那么简单,这个传参是要分俩种情况(其实这是个错误的说法 ...

  6. RMAN备份与恢复(二)--常用操作学习

    (1)连接目标数据库 在RMAN中可以建立与目标数据库或恢复目录数据库的连接.与目标数据库连接时,用户须具有sysdba系统权限,以保证可以进行数据库的备份.修复与恢复工作. 可以在操作系统命令提示符 ...

  7. Windows 7安装Oracle 10g的方法

    Windows7下安装Oracle 10g提示"程序异常终止,发生未知错误"的解决方法 1.修改Oracle 10G\database\stage\prereq\db\refhos ...

  8. HTTP协议 URL

    http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的We ...

  9. SCI论文写作中的注意事项

    SCI论文一般都是英文的格式,其中有很多原则和细节需要我们注意,在我完成第一篇SCI论文的过程中,做些记录,同时和大家分享一下这些经验.同时也稍微改变一下园子里的人口比例,都是攻城狮,程序猿什么的也过 ...

  10. 查询sql表列名

    --查询sql 查询表列名Select Name FROM SysColumns Where id=Object_Id('Tab') --查询sql数据库表列名称select name from sy ...