openssl s_server가 명령줄이나 서버 자체(서버는 centOS를 사용함)에서 직접 모든 http(s) 요청에 응답하도록 하려면 어떻게 해야 합니까? 그게 가능합니까?
openssl s_server의 -help 명령에서 다음 용도로 사용해야 하는 -HTTP 플래그가 있음을 확인합니다.
-WWW - Respond to a 'GET /<path> HTTP/1.0' with file./<path>
-HTTP - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>
with the assumption it contains a complete HTTP response.
이것이 내 문제를 해결할 수 있을까요? 그렇다면 이 플래그를 사용하는 방법에 대한 예를 찾을 수 없으므로 정확하게 사용하는 방법을 알고 싶습니다.
내가 실행하려는 명령은 간단합니다.
openssl s_server -key key.pem -cert cert.pem -msg
미리 감사드립니다!
답변1
-WWW
또는 을 -HTTP
사용 하면 s_server
현재 디렉터리의 파일을 사용하는 정적 콘텐츠 HTTPS 서버 역할을 합니다. 데모에 사용한 전체 설정은 다음과 같습니다.
$ openssl req -x509 -nodes -newkey rsa -keyout key.pem -out cert.pem -subj /CN=localhost
$ echo 'hello, world.' >index.txt
$ openssl s_server -key key.pem -cert cert.pem -WWW
Using default temp DH parameters
Using default temp ECDH parameters
ACCEPT
s_server
이제 포트 4433에서 HTTPS 요청을 기다리고 있습니다. 다른 쉘에서 사용하도록 s_server
요청할 수 있습니다 curl
.
$ curl -kv https://localhost:4433/index.txt
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 4433 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* Server certificate:
* subject: CN=localhost
* start date: 2015-06-01 15:29:02 GMT
* expire date: 2015-07-01 15:29:02 GMT
* issuer: CN=localhost
* SSL certificate verify result: self signed certificate (18), continuing anyway.
> GET /index.txt HTTP/1.1
> User-Agent: curl/7.38.0
> Host: localhost:4433
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 ok
< Content-type: text/plain
<
hello, world.
* Closing connection 0
* SSLv3, TLS alert, Client hello (1):
$ curl -k https://localhost:4433/not-existence
Error opening 'not-existence'
140226499298960:error:02001002:system library:fopen:No such file or directory:bss_file.c:169:fopen('not-existence','r')
140226499298960:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:172:
각 요청마다 s_server
요청된 경로를 인쇄하고 다음 요청을 다시 기다립니다.
FILE:index.txt
ACCEPT
CGI처럼 요청 시 스크립트를 실행하려면 다음과 같은 다른 도구를 사용해야 할 수도 있습니다.소캇.
$ echo 'echo "Your request is $(head -1)"' > server.sh
$ socat openssl-listen:4433,cert=cert.pem,key=key.pem,verify=0,reuseaddr,fork exec:"bash server.sh"
결과 :
$ curl -k https://localhost:4433/index.txt
Your request is GET /index.txt HTTP/1.1