컬이 있는 단방향 SSL

컬이 있는 단방향 SSL

나는 거기에 많은 주제와 기사가 있다는 것을 알고 있지만 나는 이것에 대해 정말로 바퀴를 돌리고 있습니다.

TLS에서 실행되는 NodeJS 인스턴스가 있습니다. cURL을 사용하여 연결하려면 다른 서버가 필요합니다. 안타깝게도 -k제가 사용하고 있는 cURL 버전의 제한으로 인해 이 작업을 수행할 수 없습니다 .

따라서 연결할 때 인증서 경고가 없어야 합니다.

내 생각은 다음과 같습니다.

1. to generate a cert 
2. generate a certificate signing request
3. acquire the CA
4. sign the certificate with the CA
5. Configure NodeJS to send the CA, Cert, and Key during handshakes
6. Have the requesting server do a cURL command, specifying the certificate in the command.

이것이 의미가 있습니까, 아니면 거꾸로입니까? 각 부분을 구별하는 데 많은 어려움을 겪고 있습니다.

감사해요,

편집하다

그래서 분명히 나는 ​​응답을 바탕으로 내가 무엇을 하고 있는지 전혀 모릅니다. CA, 공개 및 개인 키의 사본을 얻을 수 있는 경우. 그러면 어떻게 진행해야 합니까? 자세히 설명해주세요.

답변1

불행하게도 내가 사용하고 있는 cURL 버전의 제한으로 인해 -k를 수행할 수 없습니다.

그것은 처음부터 잘못된 접근 방식입니다. -k서버 인증서의 유효성 검사를 비활성화하여 중간자 공격을 쉽게 만듭니다. 즉, https가 방지하려는 것을 정확히 허용합니다.

  1. NodeJS를 다음과 같이 구성합니다.핸드셰이크 중에 CA, 인증서 및 키를 보냅니다.
  2. 요청 서버가 cURL 명령을 수행하도록 하세요.명령에 인증서 지정.

여기서 달성하려는 것이 무엇인지 잘 모르겠지만 올바르게 이해했다면 서버 측에서 인증서를 생성한 다음 나중에 이 인증서를 확인할 수 있도록 이 인증서를 클라이언트에 보내십시오.

이 접근 방식의 문제점은 새로 생성된 인증서를 서버에서 클라이언트로 보내는 것을 보호해야 한다는 것입니다. 그렇지 않으면 중간자 공격자가 생성한 인증서와 인증서를 교환하여 탐지할 수 없는 중간자 공격을 계속할 수 있습니다.

안타깝게도 귀하의 질문은 알 수 없는 문제를 해결하려는 시도를 설명하고 있습니다(참조:XY 문제). SSL을 수행하는 일반적인 방법은 클라이언트가 이미 신뢰하는 인증 기관(CA)과 이 CA에서 발급한 인증서를 갖는 것입니다. 대부분의 경우 Let's Encrypt와 같은 공용 CA가 클라이언트에 의해 이미 신뢰되기 때문에 이를 위해 사용됩니다(OS 또는 브라우저와 함께 제공). 귀하의 질문에는 왜 이렇게 확립된 방식으로 갈 수 없고 대신 자신만의 솔루션을 고안해야 하는지에 대한 설명이 없습니다.

관련 정보