coTurn 설정(주로 클라이언트 로그인 검증) 및 검증 원리 분석
1. 데이터베이스를 사용하지 않고 비밀번호를 설정하는 것이 가장 간단하다
./turnserver -a --no-tls --no-dtls --no-stun -u testuser:testpwd -r myrealm -v
./turnutils_peer -v
./turnutils_uclient -u testuser -w testpwd -e 192.168.0.100 -r 3480 192.168.0.100
이곳의 realm 설정은 새가 사용하지 않는 것 같습니다. 클라이언트는 설정할 필요도 없고 로그인할 수도 없습니다.하지만 아래의 방법을 사용하면 쓸 수 있다.
둘째, TURN REST API 사용
켜야 합니다
--use-auth-secret
.이른바 TURN REST API의 주요 의미는 임시 비밀번호에 만료 시간을 설정하는 것이다. 예를 들어 oauth의accesstoken과 같다.사용자는 매번 자신이 개발한 REST API에 와서 임시 비밀번호와 비밀번호 만료 시간을 꺼낸 후,coTurn에 가서 로그인을 검증합니다.REST API와coTurn은 암호를 얻기 위해 지정한 데이터베이스에 액세스합니다.물론 이 TURN REST API는 당신이 원하는 방식으로 할 수 있습니다. 예를 들어 RESTFUL API, 사용자 정의 tcp나udp 메시지, 웹소켓...클라이언트와 통신만 하면 됩니다.--use-auth-secret TURN REST API flag. Flag that sets a special WebRTC authorization option that is based upon authentication secret. The feature purpose is to support "TURN Server REST API"as described in the TURN REST API section below. This option uses timestamp as part of combined username: usercombo -> "timestamp:username", turn user -> usercombo, turn password -> base64(hmac(input_buffer = usercombo, key = shared-secret)). This allows TURN credentials to be accounted for a specific user id. If you don't have a suitable id, the timestamp alone can be used. This option is just turns on secret-based authentication. The actual value of the secret is defined either by option static-auth-secret, or can be found in the turn_secret table in the database.
타임 스탬프와user의 값을usercombo:
"timestamp:username"
로 합치면 이timestamp는 이 임시 비밀번호의 유효 시간입니다. 현재 시간이 이 시간보다 크면 만료가 무효입니다.password의 값은: base64(hmac(input_buffer = usercombo, key = shared-secret))
, 이 안에 있는 shared-secret
의 값은 --static-auth-secret 옵션으로 정의되며, 이 옵션이 켜지지 않으면 데이터베이스에 있는turn_secret 표에서 찾습니다.turn_시크릿 테이블에는 여러 개의 다른 시크릿 키를 설정할 수 있습니다.coTurn은 비밀번호를 검증할 때 이 테이블의 모든 시크릿 계산 서명을 가져오거나 완료할 때까지 반복합니다.
보충:
클라이언트가 httprestfulapi 인터페이스에 접근하여turn에 로그인할 사용자 이름과 비밀번호를 찾습니다.이 사용자 이름은 타임 스탬프와 사용자 이름을 포함하여usercombo라고 합니다. 형식은timestamp:username입니다.암호도restfulapi 계산으로 되돌아옵니다. 위의 알고리즘을 사용하여usercombo와shared-secret로 암호를 계산하여 클라이언트에게 되돌아옵니다.shared-secret은turnserver가 시작될 때 --static-auth-secret 옵션을 지정할 수도 있고 데이터베이스의turn_secret 테이블에 지정되어 있고 여러 개가 있습니다.restfulapi는 무작위로 하나를 가져와 계산할 수 있습니다.turnserver는'암호'를 검사할 때 모든shared-secret를 하나하나 계산하여 사용자가 올린'암호'와 비교 검증합니다.여기에서 여러 개의shared-secret를 사용하는 장점은 사용자가restfulapi에 가서 비밀번호를 얻을 때마다shared-secret가 여러 개 중에서 무작위로 하나를 선택하기 때문에 비밀번호는shared-secret에 따라 달라진다. 이렇게 하면 해커의 해독 난이도를 증가시킬 수 있다.위에서 말한 turnserver가 검증한'비밀번호'는 사실restfulapi에서 가져온 비밀번호가 아니라md5 알고리즘을 통해 산출된 키입니다. 알고리즘은 아래에 설명되어 있습니다.타임 스탬프의 역할: 암호의 유효 시간을 표시합니다.예정된 시간을 초과하면 서버는 데이터베이스에 저장된username을 다시 계산합니다.비밀번호가 만료된 후 클라이언트는restfulapi에서 새로운usercombo와password를 다시 가져와야turn에 로그인할 수 있습니다.
3. coTurn 로그인 원리 검증
coTurn 검증 클라이언트 로그인 과정은 사실 서명을 검증하는 과정입니다.WebRTC는 TURN REST API를 통해 위에서 계산한 패스워드를 받은 후에도 MD5(user:realm:password)를 사용하여 키를 계산한 다음에 턴 프로토콜에서 HMAC-SHA1과 키를 사용하여 자신의 내용에 서명하고 서명도 내용 뒤에 추가한다.턴은 WebRTC 사용자가 로그인한 username, realm과 자신의 표에 있는shared-secret에서 실시간으로 키를 계산한 다음에 키로 WebRTC가 전송한 내용에 대해 HMAC-SHA1 서명을 하고 WebRTC의 서명과 비교한다. 만약에 같다면 검증을 통과한다.
WebRTC 자체에 realm이 없습니다. 이 realm은coTurn과 로그인하기 전에 악수를 했습니다.WebRTC 로그인 메시지는 username, 받은 realm 및 HMAC 서명을 제공합니다.
coTurn 코드:
userdb.c
get_user_key
WebRTC를 검증하는 과정에서coTurn은 데이터베이스에서 Secret 목록만 찾았고 사용자의 패스워드를 찾지 않았다. 검증은 WebRTC의 메시지 패키지의 서명만 검증했을 뿐이다. 사실 모든 안전의 보장은 secret에 있다. 만약에 secret가 유출되면 시스템이 해독되고 해커는 secret와 모든 사용자 이름으로 로그인할 수 있다.여러 개의 시크릿이 있을 수 있지만 한 개의 시크릿이 유출되면 다 끝장이다. 여러 개의 시크릿은 해커의 충돌을 증가시키기 위해 시크릿을 추측하는 데 어려움을 겪을 수 있다.password가 만료되면 TURN REST API는 새로운password를 다시 생성합니다. 이 때 secret 목록에서 무작위로 secret를 가져와 암호화합니다.secretr의 중요성 때문에 secret은 32바이트의 랜덤 값을 길게 하는 것이 좋습니다. 해커의 충돌로 추측되는 것을 방지하기 위해 일정 시간 사용한 후에 동적 업데이트가 필요합니다.물론 시크릿 목록이 너무 길면 로그인 검증 속도에 영향을 미칠 수 있습니다. 왜냐하면coTurn은 시크릿 목록을 하나하나 훑어봐야 하기 때문입니다.
4. Redis 데이터베이스 사용
정상적인 상황에서 일반적으로 모든 클라이언트의 사용자 이름과 비밀번호를 데이터베이스에 함께 존재하고 암호화해야 한다.coTurn은 대부분의 데이터베이스를 지원합니다. Redis를 선택하겠습니다.
secret :
smembers turn/realm//secret
password(key) , key :
get turn/realm//user//key
추가 설정 참조
schema.userdb.redis
파일입니다.5. oauth 지원
Turn은 oauth를 지원하지만 현재 버전의 WebRTC는 oauth를 지원하지 않습니다. 처음에 저는 WebRTC 1.0 초안을 봤는데 안에 oauth를 지원한다고 썼습니다. 사실은 초안 계획일 뿐입니다. 아직 실현되지 않았습니다. 이것은 저를 오랫동안 오도했습니다. MD.그래서 이제 나도 coTurn의 oauth 테스트 안 할 거야.
6. admin user는 무엇에 쓰입니까?
CoTurn은 HTTPS 페이지도 제공합니다.
turn_admin_server.c:
static void write_https_home_page(ioa_socket_handle s)
이 함수는 페이지를 출력합니다. 예를 들어realm 수정,users 보기 등 시스템 설정을 할 수 있습니다.admin 사용자는 이 페이지에 접근하는 데 사용됩니다.
coTurn은 https 관리 페이지뿐만 아니라 Telnet도 지원합니다.turnserver를 시작할 때 - no-http를 사용하여 https 관리 페이지를 닫고 - no-cli를 사용하여 Telnet 지원을 닫을 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.