연결을 끊고 명령을 실행하는 SSL 서버 설정


0

포트에서 수신 대기하는 간단한 SSL 서버를 설정하는 방법과 장치가 연결될 때 장치에 연결을 끊고 명령을 실행하는 방법에 대한 제안을 찾고 있습니다.

컨텍스트 : 장치는 Amazon 대시이며 연결할 때 메시지가 암호화되지만 메시지는 신경 쓰지 않습니다.

openwrt 라우터에서 이것을 실행할 것입니다

netcat 및 openssl s_server 사용에 대해 읽었지만이를 구현하는 가장 좋은 방법에 대한 피드백과 제안을 원합니다.

다음은 netcat을 사용하는 현재 솔루션입니다.

while true; do
    netcat -vv -l -p 443 -c < /www/default.html
    curl -X POST http://maker.ifttt.com/trigger/button_pressed/with/key/<MY KEY>
    sleep 5

끝난

이 솔루션에 대한 의견이 있으십니까?


openwrt 지원에 대해서는 알지 못하지만 연결 끊기를 전송하고 한쪽 끝에는 스터 넬을 연결하고 다른쪽에는 리스너로 임의의 포트를 연결하는 서비스를 작성할 수 있습니다. 그러나 서비스 작성은 사소한 작업이 아닙니다.
— Frank Thomas

하나를 설정하는 데 좋은 소개 문서를 추천 할 수 있습니까?
— Steven Feldman

OpenSSL에는 기본 서버가 있습니다. 로 실행 openssl s_server하면 소스 코드는에 <openssl src dir>/apps/s_server.c있습니다. SSL / TLS 프론트 엔드 용 터널도 좋은 선택입니다. 가장 먼저 아키텍처를 결정해야합니다.
— jww

일반적인 SSL 서버 설정과는 거리가 멀기 때문에 더 나은 제목이 필요합니다.
— xpt 2016 년

@xpt는 아마도 새로운 제목을 제안했을까요?
— Steven Feldman

답변:


1

대시 버튼을 속이도록 SSL 서버를 설정하는 데 필요한 지침을 찾았습니다.

https://mpetroff.net/2015/05/amazon-dash-button-teardown/

(2015 년 8 월 9 일 오후 5시 39 분에 게시 된 Mark의 의견 아래 참조)

그는 https://gist.github.com/jonathantneal/774e4b0b3d4d739cbc53 의 웹 서버를 사용했습니다.

위의 정보를 사용하여 자체 SSL 서버를 작성할 수있었습니다.

import BaseHTTPServer, SimpleHTTPServer, ssl

class MyHTTPHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(s):
        print 'GET', s.path

    def do_POST(s):
        print 'POST', s.path

if __name__ == "__main__":
    # Create the server, binding to localhost on port 443
    httpd = BaseHTTPServer.HTTPServer(('', 443), MyHTTPHandler)
    httpd.socket = ssl.wrap_socket (httpd.socket, certfile='cert.pem', server_side=True)
    httpd.serve_forever()

그리고 다음과 같은 출력을 얻습니다.

POST /2/b
POST /2/d
POST /2/d
POST /2/d

위의 내용은 모두 한 번의 프레스입니다. 그러나 들어오는 연결 만 처리하는 일반 TCP 서버보다 유용하지 않습니다. 한 번 누르기, 두 번 누르기 및 길게 누르기 간에는 차이가 없습니다.

(자체 서명 인증서를 신뢰하려면 대시 버튼을 속일 필요가 있습니다. 이것이 내가 한 일입니다)

$ openssl req -x509 -newkey rsa:2048 -out cert.pem -nodes -keyout cert.pem
Generating a 2048 bit RSA private key
.................................................+++
..................................................................................................................+++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:Washington
Locality Name (eg, city) []:Seattle
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:Amazon.com, Inc.
Common Name (e.g. server FQDN or YOUR name) []:parker-gateway-na.amazon.com
Email Address []:

감사! 바보 같은 부분은 내가 어려움을 겪고있는 곳이었습니다. 인증서를 만들 때 정보를 입력하지 않았습니다 (기본값을 사용했습니다). 나는 또한 스크립트를 쓰는 것의 대안으로 dhcp-script를 읽고 있습니다
— Steven Feldman

천만에요. 솔직히 말해서 Mark의 게시물을 볼 때까지는 효과가 없을 것이라고 생각했습니다. 당신이 나에게 묻는다면 꽤 시끄러운 보안.
— 일부 사용자

최근에 다른 대시 버튼을 주문했는데 위의 솔루션이 더 이상 작동하지 않는다는 것을 알았습니다. 우선, 주소가 dash-button-na.amazon.com으로 변경되었습니다. 그러나 아마존은 일어나서 서명 권한을 확인한 것으로 보인다. 더 나쁜 것은 대시 버튼이 대시 버튼과 동일한 서브넷 내에 있으면 서버에 대한 연결을 시작하지 않는 것입니다.
— 일부 사용자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.