SecureToken 是一个针对结合使用 Wowza StreamLock AddOn (RTMPS)、RTMPE 或者 RTMPTE 时的欺骗威胁 (比如 Replay Media Catcher 和 Grab Pro 带来的威胁) 提供高层内容保护的安全体系的质疑和回应。每个连接由一个随机的一次性的键和一个密码 (共享密钥) 进行保护。
        注意:SecureToken 功能内置于 Wowza Media Server 3.5.0 及其之后的版本。如果你使用的是 Wowza Media Server 的早期版本,你必须下载 MediaSecurity Addon 包以获得该模块。下载并解压缩 ​​MediaSecurity Addon 包​​,将加压缩后的 /lib 目录下的 wms-plugin-security.jar 文件复制到 Wowza Media Server 的 /lib 目录,然后重启 Wowza Media Server。

        概述
        当一个 Adobe Flash 客户端连接到 Wowza Media Server 时,自定义的 SecureToken 模块会为等待的连接生成一个独一无二的键。生成的键使用一个共享密钥进行加密,然后作为 NetConnection.onStatus 信息对象的一部分返回给客户端。Flash 客户端使用相同的共享密钥对这个独一无二的键进行解密,并将结果返回给自定义模块。服务器端将这个键和原始生成的键进行比较,如果值不能够匹配,那么连接将被中断。
        SecureToken 安全被包含在这两个模块中: ModuleSecureTokenModuleRTMPAuthenticate。更多关于 ModuleRTMPAuthenticate 模块的信息,参考 ​​如何为 RTMP 和 RTSP 发布启用用户名/密码验证 (ModuleRTMPAuthenticate)​​​。

        在服务器端配置 SecureToken
        服务器端配置 SecureToken 执行以下步骤:
        1. 根据我们的 ​​​教程​​​ 搭建直播或者点播服务。
        2. 使用文本编辑器打开 [install-dir]/conf/[application]/Application.xml,并将以下 <Module> 定义放在 <Modules> 列表的最后:

<Module>
<Name>ModuleSecureToken</Name>
<Description>ModuleSecureToken</Description>
<Class>com.wowza.wms.security.ModuleSecureToken</Class>
</Module>


       

注意:如果你运行的是 Wowza Media Server 3.1.2 或者更早期的版本,那么应该使用以下

<Module> 替代上面的:


<Module>
<Name>ModuleSecureToken</Name>
<Description>ModuleSecureToken</Description>
<Class>com.wowza.wms.plugin.security.ModuleSecureToken</Class>
</Module>


       

注意:如果你应经使用了

ModuleRTMPAuthenticate 模块来验证 RTMP 流,那你不需要将

ModuleSecureToken 模块添加到

<Modules> 列表。

ModuleRTMPAuthenticate 模块已经支持了 SecureToken 保护。


        3. 在

Application.xml 文件的底部添加以下属性到 application-level 的

<Properties> 容器中 (务必找到正确的

<Properties> 容器,该文件中有很多):


<Property>
<Name>secureTokenSharedSecret</Name>
<Value>[secure-token-secret]</Value>
</Property>


        使用你自己的 SecureToken 键替换掉

[secure-token-secret]。例如:


<Property>
<Name>secureTokenSharedSecret</Name>
<Value>#ed%h0#w@1</Value>
</Property>


        4. 要请求用于内容回放的安全连接 (RTMPS、RTMPE 或者 RTMPTE),添加以下属性到 Application.xml 底部的

application-level

<Properties> 容器中 (务必找到正确的

<Properties> 容器,该文件中有很多):


<Property>
<Name>requireSecureConnection</Name>
<Value>true</Value>
<Type>Boolean</Type>
</Property>



       

在客户端配置 SecureToken


        SecureToken 安全特性要求修改你的客户端 ActionScript 播放器代码以使其能够正确地应对 SecureToken 挑战。接下来介绍如何在自定义 Flash 客户端代码中实现这个。


        为解释如何将 SecureToken 集成到你的客户端 ActionScript 代码中,假定我们已经配置一个名为

live 的服务器端应用,该应用使用了

ModuleSecureToken 模块来保护内容的发布和回放,

secureTokenSharedSecret 属性设置为

mytestpassword


        建立一个到服务器端的 Flash 客户端代码如下:


import com.meychi.ascryptAS3.TEA;

var nc:NetConnection = new NetConnection();

function ncOnStatus(infoObject:NetStatusEvent)
{
if (infoObject.info.code == "NetConnection.Connect.Success")
{
if (infoObject.info.secureToken != null)
nc.call("secureTokenResponse", null, TEA.decrypt(infoObject.info.secureToken, "mytestpassword"));
}
}

nc.addEventListener(NetStatusEvent.NET_STATUS, ncOnStatus);
nc.connect("rtmp://localhost/vod");


        例子中的第一行导入了用于解密 SecureToken 令牌的

TEA 库。ActionScript 2.0 和 3.0 版本的这一代吗包含在这个下载链接中:

​ActionScriptTEA.zip​​。


        如果你打算将这些代码集成到你的播放器中,你需要拷贝这些类到你的 Flash 客户端代码中去。


        接下来,我们定义并创建一个将被用于和 Wowza Media Server 服务器端通信的

NetConnection 对象。接下来是在

NetConnection 对象周期中将被调用的

NetConnection onStatus 处理器。我们添加

onStatus 处理器作为

NetConnection 的一个监听器,最后添加一个

NetConnection.connect(url) 以连接到 Wowza Media Server。


        当

NetConnection 建立了和 Wowza Media Server 的连接时,

onStatus 处理器将被以

NetConnection.Connection.Success 值的

infoObject.info.code 调用。如果服务器端使用 SecureToken 保护,那么

infoObject.info 对象也将会在

secureToken 属性中包含一个 SecureToken 质疑。要应对这一质疑,Flash 客户端代码使用设置给解密令牌的第一个参数调用远程方法

secureTokenResponse。你可以使用以下调用查看解密的令牌:


TEA.decrypt(infoObject.info.secureToken, "mytestpassword")


        这就是要完成质疑和回应循环所需要做的所有事情。在调用

secureTokenResponse 之后,连接通过了验证,你的 Flash 代码的其他部分将正常运行。如果

secureTokenResponse 方法在你的 Flash 客户端代码调用

play 或者

publish 之前没有被调用,Wowza Media Server 将会关闭连接。


        自 Wowza Media Server 3.5 起,SecureToken 客户端代码被集成进服务器

LiveVideoStreaming

VideoOnDemandStreaming 示例播放器中。此外,SecureToken 特性也已被集成进一些开源的基于 Flash 的播放器中,比如 JW Player 和 FlowPlayer。更多信息请参考以下文章: