TTN Network Server, Application Server, Join Server๋ฅผ ๋ณ๋๋ก ์ค์นํ ์ ์๋ค๋ฉด ๋งค์ฐ ์ ์ฉํ ๊ฒ์
๋๋ค. ํ์ฌ ๊ฐ์ด๋์์๋ ttn-lw-stack all-in-one ์ค์น ์ง์นจ๋ง ์ฐพ์์ง๋ง ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์์ ํจ๊ป ์๋ํ๋๋ก ํ๋ ค๋ฉด ๊ฐ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํ๋ ์ต์
์ด ์์ต๋๋ค.
...
์ด๊ฒ์ ๋ฐฐํฌ๋ฅผ ์ํ ์ ์ฐํ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋ฅญํ ๊ธฐ๋ฅ์
๋๋ค. ๊ฒ์ดํธ์จ์ด์ 3๊ฐ์ ์๋ฒ(NS, AS, JS)๋ฅผ ๋ชจ๋ ์ค์นํ๋๋ก ์ ํํ๊ฑฐ๋ JS๊ฐ ์๋ ๋ค๋ฅธ ์๋ฒ๋ฅผ ์ ํํ๊ณ ๊ฒ์ดํธ์จ์ด์ NS ๋ฐ AS๋ง ์ ์งํ์ฌ ์ฌ๋ฌ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ค์ ์ง์ค์์ผ๋ก ์๊ฒฉ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์.
...
์ง๊ธ์ 3๊ฐ์ ์๋ฒ(NS, AS ๋ฐ JS)๋ฅผ ๋ชจ๋ ํฌํจํ๋ ttn-lw-stack์ ์ค์นํ๋ ๋ฐฉ๋ฒ๋ง ๋ณผ ์ ์์ต๋๋ค.
...
NS, AS, JS๋ฅผ ํ๋์ ์ค์น/ํจํค์ง์ ๋ชจ๋ ์ค์นํ๋ ๋์ ๋ณ๋๋ก ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
...
์์ํ๊ธฐ ๊ฐ์ด๋์ ์ถ๊ฐํ์ธ์.
...
ํ์ฌ๋ก์๋ ์ด๊ฒ์ด ์ด๋ฏธ ๋ถ๋ถ์ ์ผ๋ก ๊ตฌํ๋์๋์ง ํ์คํ์ง ์์ผ๋ฉฐ ์๋ง๋ ๋๊ตฐ๊ฐ๊ฐ ๋๋ณด๋ค ๋ ํจ์จ์ ์ผ๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ ๊ฒ์
๋๋ค.
...
@zamashal ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ค์ ๋ก ์์ํ๊ธฐ๋ ํ์ฌ ๋จ์ผ ํ๋ก์ธ์ค ์ ๊ทผ ๋ฐฉ์์ ์ํ ๊ฒ์ด์ง๋ง ์ด๋ฏธ ๋ณธ ๊ฒ์ฒ๋ผ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์์ํ ์ ์์ต๋๋ค. ๋ณด๋ค;
$ ttn-lw-stack start --help
Start The Things Stack
Usage:
ttn-lw-stack start [is|gs|ns|as|js|console|gcs|dtc|qrg|all]... [flags]
์ด๋ฌํ ์๋น์ค๊ฐ ๋์ผํ ํด๋ฌ์คํฐ ๋ฐ ์๋ธ๋ท์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ ๊ตฌ์ฑ ์์๋น ์๋น์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ต๋๋ค.
์ง๊ธ์ ์ด ๋ฌธ์ ์ ๋ฒ์๋ฅผ ๋ค์ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ผ๋ก ์ง์ ํ๊ณ ์์ต๋๋ค.
@johanstokking ๊ทํ์ ์๋ต๊ณผ ๋ฐฑ๋ก๊ทธ์ ๋ฌธ์ ๋ฅผ ์ถ๊ฐํด ์ฃผ์
์ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ ๋์, ๋น์ ์ด ์ด๊ฒ์ ๋์์ค ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ผ๋ก ์กฐ์ธ ์๋ฒ๋ฅผ ๋จ๋
์ผ๋ก ์์ํ์ต๋๋ค.
ttn-lw-stack start js --cluster.network-server "ns_ip_address" --cluster.application-server "as_ip_address"
๋ด๊ฐ ์ ์์๋ ๊ฒ์ Join ์๋ฒ๊ฐ Join_Req๋ฅผ ์์ ํ๊ณ ์ง์ ๋ ๋คํธ์ํฌ ์๋ฒ์ Join_Ans๋ฅผ ์๋์ผ๋ก ๋ณด๋ผ ํฌํธ์ ๋๋ค.
๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
@zamashal ์ฌ์ค JS๋ ์๋ฒ์ด๊ณ NS์ AS๋ ํด๋ผ์ด์ธํธ์ ๋๋ค. ๋ฐ๋ผ์ NS ๋ฐ AS์์ JS ํด๋ฌ์คํฐ ์ฃผ์๋ฅผ ๊ตฌ์ฑํ์ญ์์ค. ๋ฐ๋ผ์ ๊ฐ๋ณ ๊ตฌ์ฑ ์์์ด์ง๋ง ๋์ผํ ํด๋ฌ์คํฐ์์ ์๋ํฉ๋๋ค. ์ด๊ฒ์ ๋์ผํ ํด๋ฌ์คํฐ์์ ์๋ก๋ฅผ ์ ๋ขฐํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ํด ์ค๊ณ๋ ํด๋ฌ์คํฐ ์ธ์ฆ์ ์ฌ์ฉํฉ๋๋ค. ์์ง์ GS, NS ๋ฐ AS๋ฅผ ๋ฐฐํฌํ๊ณ ํด๋ผ์ฐ๋์ JS๋ฅผ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ์ง ์์ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ์ง์๋๋ LoRaWAN ๋ฐฑ์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด interop์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด NS๋ TLS ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ํตํด JS์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
JS๋ฅผ ์ฌ์ฉํ๋๋ก NS๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๊ณผ interop
๊ตฌ์ฑ์ผ๋ก JS๋ฅผ ๊ตฌ์ฑํ๋ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค( --help
). ์ด๊ฒ์ ๋ถํํ๋ ์์ง ์์ ํ ๋ฌธ์ํ๋์ง ์์์ต๋๋ค.
@johanstokking ๋ค์ ํ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ๋๋ ๋น์ ์ด ์ค๋ช
ํ๋๋ก์ด ์ค์ ์ ์๋ ์ํค๋ ค๊ณ ๋
ธ๋ ฅํด ์์ต๋๋ค. ํ ๊ฐ์ง ํท๊ฐ๋ฆฌ๋ ๊ฒ์ด ์์ต๋๋ค. ์ ๊ณตํ ๋งํฌ ์ Semtech Join Server์์ ์ํธ ์ด์ฉ์ฑ ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Semtech ๋๋ ๊ธฐํ์ ๊ฐ์ ์ธ๋ถ๊ฐ ์๋ TTN Stack์ Join Server ์์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. configure.yml
๋ฐ example/js.yml
์ ๋ํ ๊ตฌ์ฑ์ ๊ณ์ ์
๋ ฅํด์ผ ํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ์๊ฒผ์๊น?
์ธ๋ถ JS(TTN ์คํ์ JS๋ผ๊ณ ๋ ํจ)์ ํจ๊ป ์๋ํ๋๋ก NS๋ฅผ ์ด๋ฏธ ๊ตฌ์ฑํ์ง๋ง Join_Req๋ฅผ ๋ณด๋ด๊ธฐ ์ํด ์กฐ์ธ ์๋ฒ์ ํฌํธ 8886
(Interop/tls)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ๊ฒฐ์ด ๊ฑฐ๋ถ๋์ง๋ง JS๋ ํด๋น ํฌํธ์์ ์์ ๋๊ธฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฌ ํด์!
@zamashal ๋ค์์ ๋๋ต์ ์ผ๋ก ์ํํด์ผ ํ ์์ ์ ๋๋ค.
ํ๋๊ทธ ์ฐธ์กฐ:
--interop.listen-tls string Address for the interop server to listen on (default ":8886")
--interop.sender-client-ca.blob.bucket string Bucket to use
--interop.sender-client-ca.blob.path string Path to use
--interop.sender-client-ca.directory string OS filesystem directory, which contains sender client CA configuration
--interop.sender-client-ca.source string Source of the sender client CA configuration (static, directory, url, blob)
--interop.sender-client-ca.url string URL, which contains sender client CA configuration
Interop์๋ TLS ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ฌ์ฉํ๋ ์์ฒด ์ ์ฉ ์์ ๊ธฐ๊ฐ ์์ต๋๋ค. gRPC์ ๋์ผํ ๊ณต์ฉ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๊ณ ์ ์ฉ interop ํฌํธ(๊ธฐ๋ณธ๊ฐ 8886)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ์ฌ์ค CA๊ฐ ํ์ํฉ๋๋ค. ์ด๋ค์ NS์ ์ํด ์์ง์์ ์ฌ์ฉ๋ฉ๋๋ค. ์กฐ์ธ ์๋ฒ์์ ์ ๋ขฐํ ์ ์๋ ํด๋ผ์ด์ธํธ CA๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ ์ด๋ NetID๋ณ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ํญ์ ๊ฐ์ธ ๋คํธ์ํฌ์์ NetID 000000
๋ฐ 000001
๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ LoRa Alliance์ ๊ฐ์
ํ์ฌ ์ง์ ์ป์ ์ ์์ต๋๋ค.
interop.sender-client-ca.source
๋ฅผ directory
ํ๊ณ ์ฌ๊ธฐ์ config.yml
๊ณผ ๊ฐ์ด ์
๋ ฅํฉ๋๋ค.
# Experimentation
000000: ca-000000.pem
# The Things Network Foundation
#000013: ca-000013.pem
์ฌ์ค CA๋ ca-000000.pem
๊ฐ๋๋ค. ์์ ์ ๊ฐ์ด TTN NetID์ ๋ํด TTN์ CA๋ฅผ ์ถ๊ฐํ์ฌ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ฌธ์ํ ๋ ๊ฒ๊ณผ ๊ฐ์ง๋ง ์ค์ ๋ก ํ์ํ ๊ฒ์ ๋ก์ปฌ JS ๊ตฌ์ฑ์ ๋๋ค. ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค:
fqdn: 'thethings.example'
port: 8886
protocol: 'BI1.0'
tls:
root-ca: 'path/to/clientca.pem'
certificate: 'path/to/clientcert.pem'
key: 'path/to/clientkey.pem'
์ฌ๊ธฐ์ thethings.example
๋ ์กฐ์ธ ์๋ฒ์ FQDN์ด๊ณ JS interop์์ ๊ตฌ์ฑํ listen-tls
์ 8886 ํฌํธ์
๋๋ค.
๋ํ root-ca
๋ (์์์ ๋ฌ๋ฆฌ) _server ์ธ์ฆ์_์ ๋ฃจํธ CA์
๋๋ค. ๋์ผํ CA์ผ ์ ์์ต๋๋ค. NS์์ ์ด๋ฏธ ์ ๋ขฐํ๋ ์์ฉ(๋๋ Let's Encrypt) ์๋ฒ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ตํ ์ ์์ต๋๋ค.
์์ชฝ์์ ๋๋ฒ๊ทธ ๋ก๊ทธ๋ฅผ ํ์ฑํํ๋ฉด( log.level=debug
) ์๋ํ๋ ๊ฒ์ ๋ณด๊ฑฐ๋ ์๋ํ์ง ์๋ ์ด์ ๋ฅผ ์ถ์ ํด์ผ ํฉ๋๋ค. ํ์ด์ ๋น๋๋ค!
๋ํ ์ด ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ฌธ์ํํ๊ธฐ ์ํ ํ ์์ฒญ์ ์์ ๋กญ๊ฒ ์ ์ถํ์ญ์์ค. ๊ฐ์ด๋๊ฐ ํ์ํ ์๋ ์์ง๋ง ์ฐธ์กฐ ํ์ด์ง ์๋ ์ฝ๊ฐ์ ์ฌ๋์ด ํ์ํฉ๋๋ค.
@johanstokking , ๋๋ ์ด๊ฒ์ ๋ํด ์์ ํ ๊ฒ์ด๋ฉฐ,
์๋
ํ์ธ์ @johanstokking - ๋ชจ๋ ์ผ์ด ์ ๋๊ธธ ๋ฐ๋๋๋ค. ์งํ ์ํฉ์ ์๋ ค๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ๋ถํํ๋, ์ ๋ ์ด ์์
์ ์ํํ๊ธฐ ์ํด ๋ง์ ์ค๋ฅ๋ฅผ ํด๊ฒฐํด ์์ผ๋ฉฐ ์ฌ๊ธฐ์์ ์ ๊ฐ ์ง๋ฉดํ ์ต์ ์ค๋ฅ๋ฅผ ๊ณต์ ํ๊ฒ ์ต๋๋ค. interop์ ์ค์ ํ๊ณ ๊ธฐ๋ณธ ํฌํธ 8886์์ ๊ฐ์
์๋ฒ๋ก ๊ฐ์
์์ฒญ์ ๋ณด๋ด๋๋ก ๋คํธ์ํฌ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ ํ ๋คํธ์ํฌ ์๋ฒ ๋ก๊ทธ์ ๋ค์ ์ค๋ฅ๊ฐ ๊ณ์ ๋ฐ์ํฉ๋๋ค.
error="join-request to join-server error: http post error: Post http://js-server_ip:8886: dial tcp js-server_ip:8886: connect: connection refused"
gRPC ์๋ฒ์ ํฌํธ 1884๋ก ๊ฐ์
์์ฒญ์ ๋ณด๋ด๋๋ก ๋คํธ์ํฌ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ฉด ๋คํธ์ํฌ ์๋ฒ ๋ก๊ทธ์ ๋ค์ ์ค๋ฅ๊ฐ ๋์ ํ์๋ฉ๋๋ค.
level=error msg="uplink: processing uplink frame error" ctx_id=f046310d-e528-4dd2-9dcb-6d5c8232a799 error="join-request to join-server error: http post error: Post http://js-server_ip:1884: net/http: HTTP/1.x transport connection broken: malformed HTTP response \"\\x00\\x00\\f\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\x00\\x00@\\x00\\x00\\x03\\x00\\x00\\xff\\xff\""
ttn ์คํ ๋ก๊ทธ์ ๋ค์ ์ค๋ฅ์ ๊ฒฐํฉ๋ฉ๋๋ค.
stack_1 | WARN grpc: Server.Serve failed to create ServerTransport: connection error: desc = "transport: http2Server.HandleStreams received bogus greeting from client: \"POST / HTTP/1.1\\r\\nHost: 1\"" namespace=grpc
๊ทํ ๋๋ ๋ค๋ฅธ ์ฌ๋์ด ์ด๋ฌํ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๊ณ ๊ทธ๋ฌํ ์ค๋ฅ์ ์์ธ์ด ๋ ์ ์๋ ์์ธ์ ์๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ทํ์ ์ง์์ ์ธ ์ง์์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
Join Server๋ https๋ฅผ ํตํด์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
NS๊ฐ DNS๋ฅผ ํตํด js-server_ip
๋ฅผ ํ์ธํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@johanstokking ๊ฐ์ฌํฉ๋๋ค! ์, ํฌํธ 8886์ docker-compose.yml์ ํธ์คํธ์ ๋งคํํ์ง ์์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด์ ๋ด๊ฐ ์ง๋ฉดํ ๋ฌธ์ ๋ TLS ํธ๋์ ฐ์ดํฌ ์ค๋ฅ์ ๋๋ค.
tls: failed to verify client's certificate: x509: certificate signed by unknown authority
์ฐ์ --tls.insecure-skip-verify
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ง๋ง ์ฌ์ ํ ์ธ์ฆ์ ํ์ธ์ ์๊ตฌํ๊ณ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฌธ์ ๋ ๋ด ๋์ปค ์ปจํ
์ด๋์ ์ธ์ฆ ๊ธฐ๊ด์ ์ ๋ขฐํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ์คํ์ ์
ธ์ ์ด์๋๋ฐ ์ปดํจํฐ์์ ์ธ์ฆ์๋ฅผ ์ ๋ขฐํ๊ธฐ ์ํด ์ธ์ฆ์๋ฅผ /usr/local/share/ca-certificates/
์ ๋ณต์ฌํ๋ ค๊ณ ํ ๋๋ง๋ค Permission denied
์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
--tls.insecure-skip-verify
ํ๋๊ทธ๊ฐ ํ์ฉํ์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ตฌํ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ด์ ๋ด ๋ฌธ์ ๋ ๋์ปค ์ปจํ
์ด๋๊ฐ ๋ด ์์ฒด ์๋ช
์ธ์ฆ์๋ฅผ ์ ๋ขฐํ ์ ์๋ ์ต์
์ ์ ๊ณตํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ๊ฑฐ๊ธฐ์ ๋ด๊ฐ ๋๋ฝ ๋ ๊ฒ์ด ์์ต๋๊น?
ํด๋ผ์ด์ธํธ CA ๊ตฌ์ฑ์ ์ ์๋ ๋๋ก SenderID
์ ๋ํด CA ์ค ํ๋๊ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ ์๋ช
ํ์ต๋๊น?
์ด๊ฒ์ด ์กฐ์ธ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ํ์ธํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์์คํ ํธ๋ฌ์คํธ๋ ๊ทธ ์ด๋ค ๊ฒ๋ ์๋๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ฐ๋ฅด๋ ค๊ณ ํ์ง๋ง ์น ์ฌ์ดํธ ์ ์ง์นจ๊ณผ ์์ ํ ์ผ์นํ์ง ์์ต๋๋ค.
๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ด config.yml์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
000000: ca-000000.pem
join-servers:
- file: './example/js.yml'
join-euis:
- 'abcd000000000000/16'
๊ทธ๋ฐ ๋ค์ ์ด๊ฒ์ js.yml์ ๋ฃ์ต๋๋ค.
fqdn: 'thethings.example'
port: 8886
protocol: 'BI1.0'
tls:
root-ca: 'path/to/clientca.pem'
certificate: 'path/to/clientcert.pem'
key: 'path/to/clientkey.pem'
๋ฐ์ ์ ํด๋ผ์ด์ธํธ CA๋ ์์ง ๋ฌธ์ํ๋์ง ์์์ผ๋ฉฐ ์ด ๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ๊ฑฐ๋ ๊ต์ฒดํ๋ ๊ณผ์ ์์ ์ด๋ฅผ ์ํํ ๊ฒ์ ๋๋ค. (์ฌ๊ธฐ)[ https://github.com/TheThingsNetwork/lorawan-stack/issues/1818#issuecomment -575534345]๋ฅผ
--interop.sender-client-ca.blob.bucket string Bucket to use
--interop.sender-client-ca.blob.path string Path to use
--interop.sender-client-ca.directory string OS filesystem directory, which contains sender client CA configuration
--interop.sender-client-ca.source string Source of the sender client CA configuration (static, directory, url, blob)
--interop.sender-client-ca.url string URL, which contains sender client CA configuration
๋ฐ๋ผ์ source
๋ฅผ directory
๋ก ์ค์ ํด์ผ ํ๋ฉฐ ์์ ์ธ๊ธํ ํ์์ ๊ตฌ์ฑ์ ํด๋น ํด๋์ config.yml
์ ๋ฃ์ด์ผ ํฉ๋๋ค. interop ๊ตฌ์ฑ๊ณผ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์
๋๋ค.
@johanstokking ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๊ทธ๊ฒ์ด ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ์์ด์ผํ๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค. ๋ง์นจ๋ด ์ธ์ฆ์ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ณ ์ด์ ttn-stack ๋๋ฒ๊ทธ ๋ก๊ทธ์์์ด ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค (์๋์ ์ผ๋ก ํค๋ฅผ ๊ฐ๋ ธ์ง๋ง ์ ํํ์ต๋๋ค).
stack_1 | INFO Join not accepted dev_eui=0000000000000000 error=error:pkg/redis:not_found (entity not found) join_eui=0000000000000000 method=POST namespace=joinserver/interop remote_addr=gateway_ip:49426 request_id=01E1D3PZ63CQ7VNCE5JE8SDC3J url=/
stack_1 | INFO Request handled duration=2.948762ms error=error:pkg/interop:join_req (join-request failed) error_cause=error:pkg/redis:not_found (entity not found) method=POST namespace=interop remote_addr=gateway_ip:49426 request_id=01E1D3PZ63CQ7VNCE5JE8SDC3J status=400 url=/
gateway_ip๋ NS์ AS๊ฐ ์์ฃผํ๋ ๊ณณ์ด๊ธฐ๋ ํฉ๋๋ค.
์ด๊ฒ์ NS ๋๋ฒ๊ทธ ๋ก๊ทธ์์๋ ๋ณผ ์ ์๋ ๊ฒ์ ๋๋ค.
time="2020-02-18T16:36:52-05:00" level=error msg="uplink: processing uplink frame error" ctx_id=ef20804f-13a8-4f7f-b90e-ce279c1e11ea error="join-request to join-server error: response error, code: JoinReqFailed, description: error:pkg/redis:not_found (entity not found)"
๋ด๊ฐ ์ฝ์ ์์๋ ๊ฒ์์ ์ค๋ฅ๋ docker-compose์ redis ๊ตฌ์ฑ ์์์ ์๋ชป๋ ๊ตฌ์ฑ์ ๋ํด ๋ถํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ผ์นํ๋์ง ํ์ธํ๊ธฐ ์ํด ๊ตฌ์ฑ ์์ต์๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ์ต๋๋ค. ๋ด ๊ตฌ์ฑ์ ์์๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
volumes:
- ${DEV_DATA_DIR:-.env/data}/redis:/data
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ต๋๋ค.
volumes:
- './data/redis:/data'
๊ทธ๋ฐ ๋ค์ ์คํ์ ์คํํ ์ ์๋ ๋ค์ ์ค๋ฅ๊ฐ ํ์๋๊ธฐ ์์ํ์ต๋๋ค.
stack_1 | error:cmd/internal/shared:initialize_identity_server (could not initialize Identity Server)
stack_1 | --- error:pkg/identityserver:db_needs_migration (the database needs to be migrated)
stack_1 | --- pq: database "ttn_lorawan" does not exist
์ด ๋ณ๊ฒฝ์ด ํ์ํ์ง ์ ํ ํ์ ์ด ์์ง ์์์ต๋๋ค. ./data/redis/
์๋์๋ ``appendonly.aof``` ํ์ผ์ด ํ๋๋ง ํ์๋๋ฏ๋ก ๋ญ๊ฐ ๋น ์ง ๊ฒ ๊ฐ์ต๋๋ค..
์ด ๋ณ๊ฒฝ์ด ํ์ํ์ง ์ ํ ํ์ ์ด ์์ง ์์์ต๋๋ค.
./data/redis/
์๋์ ``appendonly.aof``` ํ์ผ์ด ํ๋๋ง ํ์๋์ด ๋ญ๊ฐ ๋น ์ง ๊ฒ ๊ฐ์ต๋๋ค..
์๋์, ์ฌ์ค Redis์๋ ๊ด์ฐฎ์ต๋๋ค.
๊ทํ์ ์ฅ์น๊ฐ Join Server์ ๋ฑ๋ก๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์, ์๋ง ๊ทธ ๋๋ฌธ์ผ ๊ฒ์
๋๋ค. ๊ธ์, ๋ด๊ฐ ํ ๊ฒ์ --js.join-eui-prefix
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์ง๋ง ์ถฉ๋ถํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌด์ํ๋ ค๊ณ ํ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๊ฐํ์ต๋๋ค: ๋ฌธ์ 1942
์๋์ผ๋ก redis ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ ์ถ๊ฐํ์ฌ ์ฅ์น๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ํ์์ ๋ฌด์์ ๋๊น? ๊ทธ ๋์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๊ณ์ ๋ฌด์ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ค๋ฅธ ๋ฌธ์ ์ ๋์๋ณด๋์ ์ก์ธ์คํ์ฌ ๋์๋ณด๋์ ์ฅ์น๋ฅผ ๋ฑ๋กํ ์ ์์์ต๋๋ค. ์ด์ sender unknown
๋ผ๋ ์ค๋ฅ๊ฐ ํ์๋๋ฉฐ ๊ฒ์ดํธ์จ์ด๊ฐ ์ธ์๋์ง ์๋๋ค๊ณ ๋ถํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฝ์์์ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ์ง๋ง ์ฌ์ ํ Disconnected
๋ฉ๋๋ค. gateway_ip์ server_ip์ ์ฃผ์๋ฅผ ์
๋ ฅํ๋ ค๊ณ ํ์ง๋ง ๋ ๋ค ์์ง ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Sender unknown์ ์ต์ข
์ฅ์น์ NetID๊ฐ ๋คํธ์ํฌ ์๋ฒ์ NetID๋ก ์ค์ ๋์ง ์์์์ ์๋ฏธํฉ๋๋ค. ๋ ๋ค 000000
๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
ttn-lw-cli end-device set <app-id> <dev-id> --net-id=000000
ํ์ฌ CLI๋ฅผ ํตํด ์ต์ข
์ฅ์น์ NetID๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
๋ด ttn-lw-cli
๊ฐ ์ด์ํ๊ฒ ์๋ํ๊ณ ๊ธฐ๋ณธ ์ต์
์ผ๋ก ๋ก๊ทธ์ธ ๋ช
๋ น๋ง ์คํํ ์ ์์ผ๋ฉฐ ๊ตฌ์ฑ ํ์ผ์ด๋ ์ธ์ฆ ๊ธฐ๊ด์ ์ง์ ํ๋ฉด permission denied
๋ฉ๋๋ค. chmod ๋ฐ chown ์ ๋ณ๊ฒฝํ์ฌ ๊ถํ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ํ์ง๋ง ๊ณ์ permission denied
๋ฉ๋๋ค. ttn-lw-cli login
๋ง ์
๋ ฅํ์ฌ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์คํํ๋ฉด ๋ค์์ ์ป์ต๋๋ค.
Post https://localhost:8885/oauth/token: x509: certificate signed by unknown authority
docker-compose up์ด ์ธ์ฆ์ ๋ฌธ์ ๋ ๋ค๋ฅธ ์ค๋ฅ ์์ด ์ ์คํ๋๊ณ ์์ง๋ง. ๊ถํ ๊ฑฐ๋ถ์ ์์ธ์ด ๋ ์ ์๋ ๋๋ฝ๋ ํญ๋ชฉ์ด ๋ฌด์์ธ์ง ์๊ณ ์์ต๋๊น?
๊ฐ์ฌ ํด์!
์๋ฒ ๋ฐ CLI ๊ตฌ์ฑ๊ณผ ์ ํํ ๋ฌด์์ ํ๋ ค๊ณ ํ๋์ง ๊ฒ์ํ ์ ์์ต๋๊น?
sudo ttn-lw-cli login
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋จผ์ ๋ก๊ทธ์ธํ๋ ค๊ณ ํ์ต๋๋ค. ์ฌ๊ธฐ ๋ด ๊ตฌ์ฑ์ด ์์ต๋๋ค.
# sudo ttn-lw-cli config
--allow-unknown-hosts="false"
--application-server-enabled="true"
--application-server-grpc-address="localhost:8884"
--ca=""
--config="/etc/ttn-cli/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.config/.ttn-lw-cli.yml"
--credentials-id=""
--device-claiming-server-grpc-address="localhost:8884"
--device-template-converter-grpc-address="localhost:8884"
--gateway-server-enabled="true"
--gateway-server-grpc-address="localhost:8884"
--identity-server-grpc-address="localhost:8884"
--input-format="json"
--insecure="false"
--join-server-enabled="true"
--join-server-grpc-address="localhost:8884"
--log.level="info"
--network-server-enabled="true"
--network-server-grpc-address="localhost:8884"
--oauth-server-address="https://localhost:8885/oauth"
--output-format="json"
--qr-code-generator-grpc-address="localhost:8884"
๋ฐ๋ผ์ ๊ธฐ๋ณธ๊ฐ์ ์คํํ๋ฉด ์ด์ ์ ๊ณต์ ํ certificate signed by unknown authority
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ธ์ฆ์ ๋ฌธ์ ๋ก ์ธํด sudo ttn-lw-cli login --ca "path/to/ca.pem"
์ต์
์ ์ถ๊ฐํ๋ ค๊ณ ์๋ํ์ง๋ง ๊ถํ ๊ฑฐ๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ค์ ์ต์ ์ ์ถ๊ฐํ๋ ค๊ณ ํ์ต๋๋ค.
sudo ttn-lw-cli login --ca "path/to/ca.pem"
์ด๊ฒ์ ์ข์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๊ตฌ์ฑ ํ์ผ์ด๋ ํ๊ฒฝ์ ๋ฃ์ ์๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋์๊ฒ ํ๊ฐ ๊ฑฐ๋ถ ์ค๋ฅ๋ฅผ ์ฃผ์๋ค.
CLI ๋๋ ์๋ฒ์์? ๋ก๊ทธ๊ฐ ์์ต๋๊น?
๋ด๊ฐ ์๊ฐํ๋ ์๋ฒ ์ค๋ฅ? ์ด๊ฒ์ด ๋ด๊ฐ ๋ณผ ์์๋ ์ ๋ถ์ ๋๋ค.
root<strong i="6">@myserver</strong>:/etc/ttn-cli# sudo ttn-lw-cli login --ca="/etc/ttn-cli/ca.pem" --log.level="debug"
open /etc/ttn-cli/ca.pem: permission denied
๋๋ ๋ํ chmod 777
๊ถํ์ ๋ถ์ฌํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฌ์ ํ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค..
/root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml
๊ตฌ์ฑ ํ์ผ์ ์ถ๊ฐํ์ฌ ๋ง์นจ๋ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค!
์ง๊ธ certificate signed by unknown authority
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ttn-lw-cli
๋๊ตฌ๋ ์ธ์ฆ์๋ฅผ ์ด๋ป๊ฒ ์ ๋ขฐํฉ๋๊น? ์ ์ฒด ๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
root<strong i="8">@localhost</strong>:/etc/ttn-stack# sudo ttn-lw-cli login --callback=false --config="/root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml" --log.level="debug" --insecure="true" --allow-unknown-hosts="true" --ca="/root/snap/ttn-lw-stack/149/ca.pem"
WARN Access token expired at 5:17PM
ERROR Please login with the login command
DEBUG ccResolverWrapper: sending update to cc: {[{localhost:1884 <nil> 0 <nil>}] <nil> <nil>}
DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc00087caa0, {CONNECTING <nil>}
DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc00087caa0, {READY <nil>}
DEBUG Finished unary call duration=2.376756ms grpc_method=AuthInfo grpc_service=ttn.lorawan.v3.EntityAccess namespace=grpc
INFO Opening your browser on https://localhost/oauth/authorize?client_id=cli&redirect_uri=code&response_type=code
WARN Could not open your browser, you'll have to go there yourself error=fork/exec /usr/bin/xdg-open: permission denied
INFO After logging in and authorizing the CLI, we'll get an access token for future commands.
INFO Please paste the authorization code and press enter
> MF2XI.JX2QFUHNVVWMEYTTRQ3S4DTGPI5VXBYJWVJQ2ZI.OG5C4HQXGMRQ4LVW7ES4IZRNH2L5OJOING2SWOW74LFLQAYDH64Q
ERROR Could not exchange OAuth access token error=Post https://localhost/oauth/token: x509: certificate signed by unknown authority
Post https://localhost/oauth/token: x509: certificate signed by unknown authority
docker-compose๋ก ์คํํ๋ ttn-stack
์ ๋ขฐํ๋ ๊ฒ๊ณผ ๋์ผํ ca.pem์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ttn-lw-cli
๊ตฌ์ฑ์์ http URI ๋ฐ http ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ/์ธ์ฆ์ ๋ฌธ์ ๋ฅผ ๋ค์ ํด๊ฒฐํ์ต๋๋ค. sudo ttn-lw-cli end-device set "mysensor1app" "mysensor1dev" --net-id=000000 --log.level="debug"
์คํํ๋ฉด ๋ค์์ด ํ์๋ฉ๋๋ค.
root<strong i="8">@localhost</strong>:/etc/ttn-stack$ sudo ttn-lw-cli end-device set "mysensor1app" "mysensor1dev" --net-id=000000 --log.level="debug"
DEBUG Using access token (valid until 6:42PM)
DEBUG ccResolverWrapper: sending update to cc: {[{localhost:1884 <nil> 0 <nil>}] <nil> <nil>}
DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc000414730, {CONNECTING <nil>}
WARN grpc: addrConn.createTransport failed to connect to {localhost:1884 <nil> 0 <nil>}. Err :connection error: desc = "transport: authentication handshake failed: context deadline exceeded". Reconnecting...
DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc000414730, {TRANSIENT_FAILURE connection error: desc = "transport: authentication handshake failed: context deadline exceeded"}
DEBUG pickfirstBalancer: HandleSubConnStateChange: 0xc000414730, {CONNECTING <nil>}
WARN grpc: addrConn.createTransport failed to connect to {localhost:1884 <nil> 0 <nil>}. Err :connection error: desc = "transport: authentication handshake failed: context deadline exceeded". Reconnecting...
๋ค์์ ๋ด ttn-lw-cli
๊ตฌ์ฑ์
๋๋ค.
--allow-unknown-hosts="true"
--application-server-enabled="true"
--application-server-grpc-address="localhost:1884"
--ca="/root/snap/ttn-lw-stack/149/ca.pem"
--config="/etc/ttn-stack/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.ttn-lw-cli.yml,/root/snap/ttn-lw-stack/149/.config/.ttn-lw-cli.yml"
--credentials-id=""
--device-claiming-server-grpc-address="localhost:1884"
--device-template-converter-grpc-address="localhost:1884"
--gateway-server-enabled="true"
--gateway-server-grpc-address="localhost:1884"
--identity-server-grpc-address="localhost:1884"
--input-format="json"
--insecure="true"
--join-server-enabled="true"
--join-server-grpc-address="localhost:1884"
--log.level="info"
--network-server-enabled="true"
--network-server-grpc-address="localhost:1884"
--oauth-server-address="http://localhost/oauth"
--output-format="json"
--qr-code-generator-grpc-address="localhost:1884"
๋ก๊ทธ์ธ ํ ์ฑ๊ณต์ ์ธ ์ธ์ฆ์ ๋ํ๋ด๋ INFO Got OAuth access token
๋ฉ์์ง๊ฐ ์์์ง๋ง ์ด๊ฒ์ด ๋ด http ์ค์ ๊ณผ ๊ด๋ จ์ด ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ๋ด docker-compose
๋ก๊ทธ์์ ๋ค์ ์ค๋ฅ๊ฐ ํ์๋๊ธฐ ์์ํ์ต๋๋ค.
stack_1 | DEBUG Rejected authentication client_id=mqtt_5bc528ca.ae4ea8 error=error:pkg/ttnpb:identifiers (invalid identifiers) error_cause=error:pkg/errors:validation (invalid `application_id`: value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$") field=application_id name=ApplicationIdentifiersValidationError namespace=applicationserver/io/mqtt reason=value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$" username=
stack_1 | WARN Failed to setup connection error=error:pkg/ttnpb:identifiers (invalid identifiers) error_cause=error:pkg/errors:validation (invalid `application_id`: value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$") field=application_id name=ApplicationIdentifiersValidationError namespace=applicationserver/io/mqtt reason=value does not match regex pattern "^[a-z0-9](?:[-]?[a-z0-9]){2,}$" remote_addr=172.18.0.1:57472
๋๋ ๊ทธ๊ฒ์ด ๋ฌด์์ ๋งํ๋์ง ์ ์ ์์์ง๋ง ๋ด๊ฐ ์ถ๊ฐํ์ง๋ง ์ฌ์ ํ ์ผ์๊ฐ ์ฐ๊ฒฐ๋์ง ์์ ๋์ผํ ์ฅ์น ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํด ๋ถํํ๋ ๊ฒ์ผ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ง๊ธ
certificate signed by unknown authority
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.ttn-lw-cli
๋๊ตฌ๋ ์ธ์ฆ์๋ฅผ ์ด๋ป๊ฒ ์ ๋ขฐํฉ๋๊น?
ca
์ ๋ฌํ CA ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. ํด๋น ํ์ผ์ ์๋ฒ ์ธ์ฆ์(์์ฒด ์๋ช
๋ ๊ฒฝ์ฐ) ๋๋ ์๋ฒ ์ธ์ฆ์์ ์๋ช
ํ CA๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค.
๋ค์์ ๋ด
ttn-lw-cli
๊ตฌ์ฑ์ ๋๋ค.
์ด ๊ตฌ์ฑ์ TLS๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋ฒ๊ฐ ๋น TLS ๊ตฌ์ฑ์์ ์ด๋ฌํ ์ฃผ์๋ฅผ ์์ ํ๊ณ ์์ต๋๊น?
๋ํ
docker-compose
๋ก๊ทธ์์ ๋ค์ ์ค๋ฅ๊ฐ ํ์๋๊ธฐ ์์ํ์ต๋๋ค.
์ ํจํ ์ ํ๋ฆฌ์ผ์ด์ ID๊ฐ ์๋ ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก ์ฐ๊ฒฐํ๋ MQTT ํด๋ผ์ด์ธํธ์ ๋๋ค.
ํํธ ๊ฐ์ฌํฉ๋๋ค! ๊ฐ๋ฆฌํค๋ฉฐ cert.pem
๋์ ca.pem
๋ฐํ์ง certificate signed by unknown authority
๋ฌธ์ . ๊ทธ๋ฌ๋ ์ฌ์ ํ ๋ค๋ฅธ ์ฐ๊ฒฐ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. 1884
ํฌํธ์์ ํ์คํ ๋ฃ๊ณ ์์ต๋๋ค.
user<strong i="10">@localhost</strong>:/etc/ttn-stack$ sudo netstat -tulpn | grep LISTEN
tcp6 0 0 :::1884 :::* LISTEN 18793/docker-proxy
๋ํ ํฌํธ 1884์ ํ
๋ท์ ์ฐ๊ฒฐํ๊ณ ttn-lw-cli
๋๊ตฌ๋ฅผ ์คํํ ๋ ๋ฐ์ดํฐ ํจํท์ด ๋ค์ด์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ์คํ ํจํท ๊ตํ์ด ๋ฐ์ํ์ง๋ง ๋๋ฒ๊ทธ ๋ก๊ทธ๋ ์ฌ์ ํ ๋ค์ ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค. "transport: authentication handshake failed: context deadline exceeded". Reconnecting...
๋ง์นจ๋ด --insecure
ํ๋๊ทธ๋ฅผ end-device set
๋ช
๋ น์ ์ถ๊ฐํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค!! TLS์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ง๋ง ์ด์จ๋ ์ง๊ธ์ ๊ฑฑ์ ํ์ง ์์ต๋๋ค.
๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
๋ด๊ฐ ๊ทธ ์ค์ ํ ํ ์๋ ค ์ค์น --root-keys.app-key.key
๋ฟ๋ง ์๋๋ผ --net-id
์์์์ํ ๊ณผ์ ์ ์ฐธ์ฌ end-device
์ฑ๊ณต์ ์ผ๋ก ์๋ฃ ๋๋ ๋
๋ฆฝ์ ์ต์ข
์ฅ์น์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์์ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ! ๋ด๊ฐ ์ง๋ฉดํ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํตํด ํฐ ๋์์ ์ฃผ์
์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋๋จํด! ์ฌ๊ธฐ์ ์๋๋ฆฌ์ค๋ฅผ ๋ฌธ์ํํ์ฌ ํตํฉํ ์ ์๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค.
๋๊ธฐ ๋ถ์ฌ๋ ํด์ฃผ์๊ณ ์ฒซ ํฌ์ผ์ดํฌ๊ฐ ๋์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.