動画視聴認証設定

最終更新日: 2017.05.24

<<トップページ <<新着情報 <<逆引き集 <<リンク集 <<サイト内検索 <<メルマガ <<Scientific Linuxで自宅サーバー構築 <<Fedoraで自宅サーバー構築

■概要

動画配信サーバーで配信する動画の視聴にユーザー名/パスワードによるアクセス制限をかける。また、動画視聴ページを経由せずに動画ファイルを直接再生できないように下記対処を行う。

(RTMP接続時)セキュアリンク(秘密鍵を含むリンク)からのみ動画の再生を許可する
(HTTP接続時)動画視聴ページ設置元サーバーからのみ動画の再生を許可する

※なお、本ページでは既にWebサーバーが稼動しているものとし、nginxの暗号化通信使用ポートを通常の443番ではなく8443番とすることにより既存のWebサーバーと並存できるようにしている。


■nginxセキュアリンク機能&暗号化通信有効化

[root@centos ~]# systemctl stop nginx ← nginx停止

[root@centos ~]# wget https://nginx.org/download/nginx-1.10.3.tar.gz ← nginxダウンロード
※最新版のURLはダウンロードページで確認すること

[root@centos ~]# tar zxvf nginx-1.10.3.tar.gz ← nginx展開

[root@centos ~]# cd nginx-1.10.3/ ← nginx展開先ディレクトリへ移動

[root@centos nginx-1.10.3]# git clone https://github.com/arut/nginx-rtmp-module.git ← nginx-rtmp-moduleダウンロード

[root@centos nginx-1.10.3]# ./configure --add-module=nginx-rtmp-module/ --with-http_secure_link_module --with-http_ssl_module --with-debug && make && make install ← nginx+nginx-rtmp-moduleインストール

[root@centos nginx-1.10.3]# cd ← nginx展開先ディレクトリを抜ける

[root@centos ~]# rm -rf nginx-1.10.3 ← nginx展開先ディレクトリを削除

[root@centos ~]# rm -f nginx-1.10.3.tar.gz ← ダウンロードしたファイルを削除

[root@centos ~]# systemctl start nginx ← nginx起動

■nginx設定

(1)PHP有効化
セキュアリンクを含む動画視聴ページをPHPで動的に生成するためPHPを有効にする。
[root@centos ~]# yum -y install php-fpm ← php-fpmインストール

[root@centos ~]# vi /etc/php-fpm.d/www.conf ← php-fpm設定ファイル編集
user = nobody ← ユーザー名をnginx実行ユーザー名(nobody)に変更
group = nobody ← グループ名をnginx実行グループ名(nobody)に変更

[root@centos ~]# systemctl start php-fpm ← php-fpm起動

[root@centos ~]# systemctl enable php-fpm ← php-fpm自動起動設定

[root@centos ~]# vi /usr/local/nginx/conf/nginx.conf ← nginx設定ファイル編集
        location / {
            root   html;
            index  index.html index.htm;
        }
        PHP設定追加(ここから)
        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
        PHP設定追加(ここまで)

[root@centos ~]# systemctl restart nginx ← nginx再起動

[root@centos ~]# vi /usr/local/nginx/html/test.php ← テスト用PHPファイル作成
<?php
  phpinfo();
?>
http://サーバー名:8080/test.phpへアクセスしてphpinfoページが表示されること
[root@centos ~]# rm -f /usr/local/nginx/html/test.php ← テスト用PHPファイル削除

(2)サーバー証明書取得
暗号化通信するためサーバー証明書を取得する。

Webサーバー間通信内容暗号化(Apache+mod_SSL+Certbot)
■Certbotクライアントインストール
■サーバー証明書取得
■サーバー証明書自動更新設定
を実施。

(3)nginx設定
[root@centos ~]# vi /usr/local/nginx/conf/nginx.conf ← nginx設定ファイル編集
    server {
        listen       8080;
        server_name  localhost;

        httpからhttpsへの自動リダイレクト設定追加(ここから)
        # httpをhttpsへリダイレクト
        if ($request_uri !~ /on_play) {
            return 301 https://$host:8443$request_uri;
        }
        httpからhttpsへの自動リダイレクト設定追加(ここまで)

        動画ファイルの直接再生禁止設定(RTMP用)追加(ここから)
        # 動画ファイルの直接再生禁止設定(RTMP用)
        location /on_play {
            secure_link $arg_st,$arg_e;
            secure_link_md5 秘密鍵(任意の文字列)/$arg_app/$arg_name$arg_e;
            if ($secure_link = "") { return 501; }
            if ($secure_link = "0") { return 502; }
            return 200;
        }
        動画ファイルの直接再生禁止設定(RTMP用)追加(ここまで)
・
・
・
    暗号化通信設定追加(ここから)
    動画視聴認証設定追加(ここから)
    動画ファイルの直接再生禁止設定(HLS用)追加(ここから)
    # HTTPS server
    #
    server {
        listen       8443 ssl; ← HTTPSポート変更
        server_name  localhost;

        ssl_certificate      /etc/letsencrypt/live/centossrv.com/fullchain.pem; ← サーバー証明書と中間証明書
        ssl_certificate_key  /etc/letsencrypt/live/centossrv.com/privkey.pem; ← 秘密鍵

        # 動画視聴認証設定
        location ~ /.*\.php$ {
            satisfy any;
            allow 192.168.1.0/24; # 192.168.1.0/24からのみ認証なしでアクセスを許可
            deny all;
            auth_basic "STREAMING PAGE";
            auth_basic_user_file "/usr/local/nginx/passwd/.htpasswd";
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        # ライブ配信録画視聴認証設定
        location /rec/ {
            satisfy any;
            allow 192.168.1.0/24; # 192.168.1.0/24からのみ認証なしでアクセスを許可
            deny all;
            auth_basic "RECORD PAGE";
            auth_basic_user_file "/usr/local/nginx/passwd/.htpasswd";
        }

        # 動画ファイルの直接再生禁止設定(HLS用)
        location /live/ {
            valid_referers server_names centossrv.com;
            if ($invalid_referer) { return 403; }
        }
        location /vod/ {
            valid_referers server_names centossrv.com;
            if ($invalid_referer) { return 403; }
        }

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

        ssl_ciphers ECDH:!aNULL:!eNULL:!SSLv2:!SSLv3;
        ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    }
    暗号化通信設定追加(ここまで)
    動画視聴認証設定追加(ここまで)
    動画ファイルの直接再生禁止設定(HLS用)追加(ここまで)
・
・
・
rtmp {
    server {
        listen 1935;
        access_log logs/rtmp_access.log;
        chunk_size 4096;
        timeout 10s;
        notify_method get; ← GETメソッド有効化
        # ライブ配信設定
        application live {
            live on;
            on_play http://localhost:8080/on_play; ← 動画ファイルの直接再生禁止設定(RTMP用)
・
・
・
        }
        # ライブ配信録画設定
        application rec {
            play /usr/local/nginx/html/rec; # 動画ファイル格納先
            on_play http://localhost:8080/on_play; ← 動画ファイルの直接再生禁止設定(RTMP用)
        }
        # オンデマンド配信設定
        application vod {
            play /usr/local/nginx/html/vod; # 動画ファイル格納先
            on_play http://localhost:8080/on_play; ← 動画ファイルの直接再生禁止設定(RTMP用)
        }

[root@centos ~]# systemctl restart nginx ← nginx再起動

(5)ポートTCP8443番のOPEN
ルーター側の設定でポートTCP8443番をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

Portチェックテスト【外部からのPort開放確認】で「ホスト名(FQDN) または グローバルIPアドレス」にサーバー名(例:centossrv.com)、「チェックポート番号」に8443と入力して「Portチェック実行」ボタンを押下し、「ホスト:centossrv.com ポート:8443 にアクセスできました」と表示されることを確認。

(6)認証用ユーザー名/パスワード登録
[root@centos ~]# mkdir /usr/local/nginx/passwd/ ← ユーザー名/パスワードファイル作成先ディレクトリ作成

[root@centos ~]# yum -y install httpd-tools ← httpd-toolsインストール

[root@centos ~]# htpasswd -b -c -m /usr/local/nginx/passwd/.htpasswd ユーザー名 パスワード ← ユーザー名/パスワード登録
Adding password for user xxxxxxxx

■オンデマンド配信動画視聴認証確認

[root@centos ~]# vi /usr/local/nginx/html/vod.php ← オンデマンド配信動画視聴用ページ作成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>ONDEMAND</title>
    <link href="//vjs.zencdn.net/5.11.6/video-js.css" rel="stylesheet">
    <script src="//vjs.zencdn.net/5.11.6/video.js"></script>
</head>
<body>
    <video id="ONDEMAND" class="video-js vjs-default-skin" autoplay="autoplay" controls="controls" width="640" height="480" data-setup="{}">
<?php
// 秘密鍵
$secret = 'xxxxxxxx'; ← nginx.confに指定した秘密鍵を指定
// 動画パス
$path  = 'xxxxxxxx'; ← 動画パス(例:/vod/xxxxxxxx)を指定※動画ファイルの拡張子は指定しないこと

$timestamp = time() + 3600; // 60(秒) x 60(分) = 3600(秒) = 1(時間)
$hash = base64_encode(md5($secret . $path . $timestamp, true));
$hash = strtr($hash, '+/', '-_');
$hash = str_replace('=', '', $hash);
$url = "{$path}?e={$timestamp}&st={$hash}";
echo "        <source src=\"$path.m3u8?\" type=\"application/x-mpegURL\">\n";
echo "        <source src=\"rtmp://サーバー名$url\" type=\"rtmp/mp4\">";
?>

        <p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
    </video>
</body>
</html>

□内部のPCブラウザからhttps://サーバー名:8443/vod.phpへアクセスして認証なしで動画が視聴できること
□外部のPCブラウザからhttps://サーバー名:8443/vod.phpへアクセスしてユーザー名/パスワード入力後、動画が視聴できること
□内部のiPhoneまたはiPadからhttps://サーバー名:8443/vod.phpへアクセスして認証なしで動画が視聴できること
□外部のiPhoneまたはiPadからhttps://サーバー名:8443/vod.phpへアクセスしてユーザー名/パスワード入力後、動画が視聴できること
VLC media playerを起動して「メディア」−「ネットワークストリームを開く」で「ネットワークURL」にrtmp://RTMPサーバー名/アプリケーション名/動画ファイル名(例:rtmp://centossrv.com/vod/test.flv)を入力して「再生」ボタン押下で動画が再生されないこと
VLC media playerを起動して「メディア」−「ネットワークストリームを開く」で「ネットワークURL」にhttps://RTMPサーバー名:8443/アプリケーション名/動画ファイル名.m3u8(例:https://centossrv.com:8443/vod/test.m3u8)を入力して「再生」ボタン押下で動画が再生されないこと


■ライブ配信動画視聴認証確認

[root@centos ~]# vi /usr/local/nginx/html/live.php ← ライブ配信動画視聴用ページ作成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>LIVE</title>
    <link href="//vjs.zencdn.net/5.11.6/video-js.css" rel="stylesheet">
    <script src="//vjs.zencdn.net/5.11.6/video.js"></script>
</head>
<body>
    <video id="LIVE" class="video-js vjs-default-skin" autoplay="autoplay" controls="controls" width="640" height="480" data-setup
="{}">

<?php
// 秘密鍵
$secret = 'xxxxxxxx'; ← nginx.confに指定した秘密鍵を指定
// 動画パス
$path   = 'xxxxxxxx'; ← /アプリケーション名/ストリームキー(例:/live/live)を指定

$timestamp = time() + 3600; // 60(秒) x 60(分) = 3600(秒) = 1(時間)
$hash = base64_encode(md5($secret . $path . $timestamp, true));
$hash = strtr($hash, '+/', '-_');
$hash = str_replace('=', '', $hash);
$url = "{$path}?e={$timestamp}&st={$hash}";
echo "        <source src=\"$path.m3u8?\" type=\"application/x-mpegURL\">\n";
echo "        <source src=\"rtmp://サーバー名$url\" type=\"rtmp/mp4\">";
?>

        <p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
    </video>
</body>
</html>

□内部のPCブラウザからhttps://サーバー名:8443/live.phpへアクセスして認証なしでカメラ映像・音声が視聴できること
□外部のPCブラウザからhttps://サーバー名:8443/live.phpへアクセスしてユーザー名/パスワード入力後、カメラ映像・音声が視聴できること
□内部のiPhoneまたはiPadからhttps://サーバー名:8443/live.phpへアクセスして認証なしでカメラ映像・音声が視聴できること
□外部のiPhoneまたはiPadからhttps://サーバー名:8443/live.phpへアクセスしてユーザー名/パスワード入力後、カメラ映像・音声が視聴できること
VLC media playerを起動して「メディア」−「ネットワークストリームを開く」で「ネットワークURL」にrtmp://RTMPサーバー名/アプリケーション名/ストリームキー(例:rtmp://centossrv.com/live/live)を入力して「再生」ボタン押下で動画が再生されないこと
VLC media playerを起動して「メディア」−「ネットワークストリームを開く」で「ネットワークURL」にhttps://RTMPサーバー名:8443/アプリケーション名/ストリームキー.m3u8(例:https://centossrv.com:8443/live/live.m3u8)を入力して「再生」ボタン押下で動画が再生されないこと





▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします