5

rfc5766-turn-server TURNサーバーをここからwebRTC用にセットアップしようとしています。turnuserdb.confユーザー名とパスワード (my_user_name:my_password)を含むファイルを使用して、この TURN サーバーを介してビデオを正常に中継することができました。そして、私が使用したWebクライアント側で:

"iceServers":{[
    "url": "turn:my_user_name,@turn_server_ip",
    "credential":"my_password"
}]

TURN サーバーに付属の REST API 機能を使用して、パスワードをネットワーク経由で送信したり、クライアント側に保存したりしないようにしようとしています。Rest APIの下でこの仕様この説明に従いました

残念ながら、401が返されて認証できません。

これが私が正確にしたことです:

  1. シークレット「my_secret」を作成し、次のようにターン サーバーを実行しました。

    turnserver -v --syslog -a -L xx.xxx.xx.xx -X yy.yyy.yyy.yy -E zz.zzz.zz.zzz --max-bps=3000000 -f -m 3 --min-port=32355 --max-port=65535 --use-auth-secret --static-auth-secret=my_secret --realm=north.gov --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -q 100 -Q 300 --cipher-list=ALL
    

    (IPアドレスをに置き換えただけですxx.xxx.xx.xx yy.yyy.yyy.yy zz.zzz.zz.zzz

  2. その後、+ 1 時間になるタイムスタンプを生成したので、nodejs で実行しました。

    Date.now()+1000*60*60;      // output 1433895918506.
    

    このウェブサイトで一時的なパスワードを生成しました, 私の秘密を使用して、結果を得ました0ca57806bdc696b3129d4cad83746945b00af77b

  3. パスワードをbase64にエンコードしました。

  4. 1433895918506:my_user_nameここで、一時的なユーザー名 :とパスワード:を使用して、Web クライアントからターンサーバーとの通信をログに記録しようとしましたが MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg==、現在使用している Web クライアントで

    "iceServers":"url":"turn:1433895918506:my_user_name@turn_server_ip","credential":"MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg=="}]
    

しかし、うまくいきません。

401 user <1433895918506:my_user_name>  incoming packet message processed, error 401: Unauthorised.

何が問題なのかを理解するのを手伝ってもらえますか?

4

1 に答える 1

8

あなたの名前と秘密で資格情報を生成したとき、私は得られませんでした。アルゴリズム/コードにエラーが1Dj9XZ5fwvKS6YoQZOoORcFnXaI=ないか確認してください。MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg==

時間はUnix Timestampであるため、ミリ秒単位ではなく秒単位です(これは影響しませんが、資格情報が期限切れにならないようにするだけです)

システムとTURNサーバーが実行されているシステム、クロックが同期しているかどうか(少なくとも数日離れていないかどうか)を確認し、一般に、クロックが同期していない問題を回避するには、ttlを24時間として使用することをお勧めします。あなたのタイムスタンプ:

timestamp=  parseInt(Date.now()/1000) + 24*3600

TURN クレデンシャルを生成するためのコード:

var crypto = require('crypto');

function getTURNCredentials(name, secret){    

    var unixTimeStamp = parseInt(Date.now()/1000) + 24*3600,
        username = [unixTimeStamp, name].join(':'),
        password,
        hmac = crypto.createHmac('sha1', secret);
    hmac.setEncoding('base64');
    hmac.write(username);
    hmac.end();
    password = hmac.read();
    return {
        username: username,
        password: password
    };
}
于 2015-06-10T01:11:05.973 に答える