연결을 끊고 명령을 실행하는 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.