https로만 실행되도록 다트 http 서버를 설정하려고합니다. 그래서 나는 HttpServer.bindSecure
을 사용할 필요가 있지만, 무엇을 certificateName
으로 전달해야하는지, 그리고 requestClientCertificate
이 참이되는지를 설명하는 것이 명확하지 않아서 보안 성이 다소 저하되거나 보안에 아무런 영향을주지 않습니다. HttpServer
page의 상단에있는 작은 샘플 코드는 certificateName: 'localhost_cert'
으로 전달되지만 그 전에는 데이터베이스로 처리하지만 어쨌든 사용하지는 않습니다. 누구든지 이러한 가치가 무엇인지, 그리고 그들이 안전하도록하기 위해 필요한 것은 무엇인지 더 자세히 설명 할 수 있습니까?dart에서 보안 http 서버를 만드는 방법은 무엇입니까?
답변
매개 변수 bindSecure은 클라이언트 인증서를 지정하는 데 사용됩니다. 클라이언트 인증서는 서버에서 클라이언트를 식별하고 권한을 부여하는 데 사용되며이 질문의 목적이 아닙니다. IE9 및 Windows 7의 Dart에는 클라이언트 인증서를 사용하는 known issue이 있습니다.
certificateName 매개 변수는 인증서 데이터베이스에있는 인증서의 별칭을 지정하는 데 사용됩니다. certutil을 사용하여 데이터베이스로 인증서를 가져올 때 -n <nickname>
옵션을 사용하여 인증서 닉네임을 지정합니다.
에 다음 단계를 사용
암호 <password>
과 디렉토리 <dir>
에서 새 인증서 데이터베이스를 작성하고
(certutil을 포함) NSS 유틸리티를 설치
닉네임
<host>
으로 식별 된 자체 서명 또는 구입 한 인증서를 가져 와서 다음 샘플을 사용하여 HTTPS 서버를 생성하는 데 사용할 수 있습니다. 전자 코드. 닉네임은 임의로 선택할 수 있지만이 예제에서는 호스트 이름을 사용합니다. 이 단계는 Ubuntu 14.04 및 Dart SDK 1.6 (현재 마지막 안정 버전) 1.8.3에서 작동하는 것으로 확인되었습니다.
sudo apt-get install libnss3-tools
CD 인증서 데이터베이스에 사용할 암호 파일을 작성하여 인증서 데이터베이스
cd <dir>
를 포함 할 디렉토리로 NSS 유틸리티를 설치합니다
echo "<password>" > pwdfile
인증서 데이터베이스를 만들고
certutil -N -d 'sql:./' -f pwdfile
다음 중 하나를
자체 서명 된 인증서 생성 :
<host>
호스트 ("일반 이름"입니다certutil -S -s "cn=<host>" -n "self signed for dart" -x -t "C,C,C" -m 1000 -v 120 -d "sql:./" -k rsa -g 2048 -f pwdfile
을), 예를 들어 "localhost"와 같은 인증서를 생성합니다.
또는 "myhost.com"예를 들어, 먼저 실제 도메인
<host>
위한 서명 요청을 생성하여 인증서를 구입 :certutil -R -s "CN=<host>, O=None, L=San Diego, ST=California, C=US" -a -g 2048 -o <host>.csr -d "sql:./"
그런 다음 파일
<host>
.csr의 내용을 지정하라는 메시지가 표시되면 서명 기관에서 인증서를 구입할 때 CSR에 대해복사
가져 오기 데이터베이스
certutil -A -n <host> -t "p,p,p" -i <host>.crt -d "sql:./"
중간 인증서를 사용하는 것이 필요한 경우에 인증서가 .crt
<host>
라는 이름의 파일에 구입 한 인증서, 그것은 같은 가져올 수 있습니다 :
certutil -A -n my_intermediate_certificate -t "p,p,p" -i intermediate.crt -d "sql:./"
여기서 "intermediate.crt"는 서명 기관에서 다운로드 한 중간 인증서 파일입니다.
인증서가이 인증서를 사용하고 HTTPS 서버를 만들려면
certutil -L -n <host> -d "sql:./"
certutil -L -n my_intermediate_certificate -d "sql:./"
데이터베이스에 존재하는지 확인, 다음을 수행하십시오
,363,210// Initialize secure socket to use certificate database (note: replace `<dir>`
// with the absolute path to the certificate database directory, and `<password>`
// with the value chosen above)
SecureSocket.initialize(database: "<dir>", password: "<password>");
// Bind secure HTTP server to specified host and port (typically 443)
HttpServer.bindSecure("<host>", 443, certificateName: "<host>")
.then((HttpServer httpServer) {
// Listen for incoming requests
httpServer.listen((HttpRequest httpRequest) {
// TODO: process request
});
})
.catchError((error) {
// TODO: handle error
});
업데이트 내가 지금 여기에 질문에 대한 답변 도움이 될 수 있습니다 자세한 내용은, 주석에 응답 할 수있는 충분한 명성 포인트가없는
: 클라이언트 인증서는 클라이언트 - 서버 통신을 암호화하는 데 사용되지 않습니다 HTTPS를 통해 웹 브라우저와 웹 서버간에 보안 통신을 설정하는 일반적인 시나리오에서는 필요하지 않습니다. 위에 설명 된 단계는 bindSecure을 사용하여 Dart에서 HTTPS 서버를 만드는 방법을 보여줍니다.
으로 작성하십시오. 첫 번째 단락에서 IE9의 알려진 버그가 있다는 것을주의하십시오. 나는 다트가 IE10 + 만 지원한다고 믿고 있습니다. 따라서 이것은 실제로 버그가 아니며 단지 지원되지 않습니다. – 0xor1
'클라이언트 인증서는 서버가 클라이언트를 식별하고 승인하는 데 사용됩니다.이 질문은이 질문의 목적이 아닙니다.' - 내가 원하는 것은 클라이언트와 서버 간의 모든 통신이 일반 HTTP가 아닌 https를 통해 암호화되도록하는 것입니다. 클라이언트 식별 및 권한 부여에 관심이 없다면 여전히 인증서 데이터베이스로이 절차를 수행해야합니까? 또는 https를 통해 com을 보유하기위한 전제 조건입니까? – 0xor1
감사합니다. 업데이트를 위해 서버가 http가 아닌 https 만 사용하도록하려면 어떻게해야합니까? 아니면이 옵션이 아닌가요? 내가 원하는 것은 내 서버가 https만을 받아 들여서 https로 응답하는 것입니다. – 0xor1
- 1. Android에서 HTTP 서버를 만드는 방법은 무엇입니까?
- 2. Dart에서 캔버스 요소를 만드는 방법은 무엇입니까?
- 3. Dart에서 HTML 링크를 만드는 방법은 무엇입니까?
- 4. iPhoneHTTPServer 보안 서버를 만드는 방법
- 5. 메일 서버를 만드는 방법은 무엇입니까?
- 6. Nodejs에서 서버를 만드는 방법은 무엇입니까?
- 7. Apache를 실행하는 DreamHost VPS에서 Node.js로 HTTP 서버를 만드는 방법은 무엇입니까?
- 8. Node.js에서 파생 http (s) 서버를 만드는 방법은 무엇입니까?
- 9. Dart에서 파일을 업로드하는 방법은 무엇입니까?
- 10. 보안 SWF를 만드는 방법은 무엇입니까?
- 11. HTTP 커넥터로 HTTPS 호출을 만드는 방법은 무엇입니까?
- 12. Eclipse Juno에서 부두 서버를 만드는 방법은 무엇입니까?
- 13. 간단한 HTTP POST 서버를 작성하는 방법은 무엇입니까?
- 14. Node.js http 서버를 즉시 종료하는 방법은 무엇입니까?
- 15. UDP 서버를 만드는 방법은?
- 16. adb 서버를 응답하지 않게 만드는 방법은 무엇입니까?
- 17. 기본 Java 서버를 만드는 방법은 무엇입니까?
- 18. django 서버를 rasb에서 공용으로 만드는 방법은 무엇입니까?
- 19. Android 웹 서버를 만드는 방법은 무엇입니까?
- 20. PHP로 좀비 서버를 만드는 방법은 무엇입니까?
- 21. java로 SSL tcp 서버를 만드는 방법은 무엇입니까?
- 22. 간단한 프록시 서버를 만드는 방법은 무엇입니까?
- 23. C# : 청취/TCP 서버를 만드는 방법은 무엇입니까?
- 24. 프록시 서버를 사용하여 소켓을 만드는 방법은 무엇입니까?
- 25. ASP.NET 웹 API에서 서버를 만드는 방법은 무엇입니까?
- 26. RInside를 사용하여 TCP 서버를 만드는 방법은 무엇입니까?
- 27. C에서 UDP 서버를 만드는 방법은 무엇입니까?
- 28. jetty8을 사용하여 프록시 서버를 만드는 방법은 무엇입니까?
- 29. 텔넷 서버를 로컬에서 만드는 방법은 무엇입니까?
- 30. 맞춤형 바이너리 프로토콜 서버를 만드는 방법은 무엇입니까?
이 문제는이 주제와 관련된 여러 링크를 포함하며 유용한 정보로 이어질 수 있습니다. https://code.google.com/p/dart/issues/detail?id=20967 –
덕분에이 링크는 매우 유용합니다. 첫 번째 댓글 http://jamesslocum.com/post/70003236123에 링크 된 대화는 이것이 직접적인 대답으로 가장 가까이 올 것이라고 기대합니다.하지만 상관없이 좋은 기사입니다. – 0xor1
CA 인증서를 추가하려면이 자습서를 https://gist.github.com/stevenroose/e6abde14258971eae982 –