使用安全令牌保护 RTMP 流

        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,并将以下 定义放在 列表的最后:

	ModuleSecureToken
	ModuleSecureToken
	com.wowza.wms.security.ModuleSecureToken

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

	ModuleSecureToken
	ModuleSecureToken
	com.wowza.wms.plugin.security.ModuleSecureToken

        注意:如果你应经使用了 ModuleRTMPAuthenticate 模块来验证 RTMP 流,那你不需要将 ModuleSecureToken 模块添加到 列表。 ModuleRTMPAuthenticate 模块已经支持了 SecureToken 保护。
        3. 在 Application.xml 文件的底部添加以下属性到 application-level 的 容器中 (务必找到正确的 容器,该文件中有很多):

	secureTokenSharedSecret
	[secure-token-secret]

        使用你自己的 SecureToken 键替换掉 [secure-token-secret]。例如:

	secureTokenSharedSecret
	#ed%h0#w@1

        4. 要请求用于内容回放的安全连接 (RTMPS、RTMPE 或者 RTMPTE),添加以下属性到 Application.xml 底部的 application-level 容器中 (务必找到正确的 容器,该文件中有很多):

	requireSecureConnection
	true
	Boolean


        在客户端配置 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 客户端代码被集成进服务器 LiveVideoStreamingVideoOnDemandStreaming 示例播放器中。此外,SecureToken 特性也已被集成进一些开源的基于 Flash 的播放器中,比如 JW Player 和 FlowPlayer。更多信息请参考以下文章:
  • 如何添加 SecureToken 保护到 LongTail JW Player 4
  • 如何添加 SecureToken 保护到 LongTail JW Player 5
原文链接: http://www.wowza.com/forums/content.php?450-How-to-protect-RTMP-streaming-using-SecureToken-(ModuleSecureToken)。

你可能感兴趣的:(安全防御,RTMP服务)