Elasticsearch 엔드포인트를 서비스로 갖고 있습니다(구성/서버에 액세스할 수 없습니다). 이 서비스는 나에게 사용자 이름과 비밀번호, 그리고 단일 "TLS 인증서" 파일을 제공했습니다.RSA 공개 키: (2048비트)
저는 nginx를 실행 중이고 이를 Elasticsearch 엔드포인트에 대한 역방향 프록시로 사용하고 싶습니다. 따라서 요청을 전달할 때 인증서 적용을 처리하도록 nginx를 가져와야 합니다. 이 예제 구성과 유사합니다(nginx 문서에서):
location /upstream {
proxy_pass https://backend.example.com;
proxy_ssl_certificate /etc/nginx/client.pem;
proxy_ssl_certificate_key /etc/nginx/client.key;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;
proxy_ssl_trusted_certificate /etc/nginx/trusted_ca_cert.crt;
proxy_ssl_verify on;
proxy_ssl_verify_depth 2;
proxy_ssl_session_reuse on;
}
어떻게 생성할 수 있는지 아시나요?클라이언트.pem그리고클라이언트.키필수(예: openssl 사용) - 시작해야 하는 것이 단일 공개 키 파일뿐이라면 어떻게 될까요?
(편집하다)
도움이 될지는 확실하지 않지만 Java 애플리케이션에서 이 공개 키를 사용하여 유사한 작업을 수행하는 방법은 다음과 같습니다. 키 파일을 가져와 완전한 형식의 x509 인증서가 있는 객체를 구축합니다. 이 인증서는 요청과 함께 Elastic으로 전송되며 작동합니다.
File caFile = new File("elastic_key_file.crt");
CertificateFactory fact = CertificateFactory.getInstance("X.509");
FileInputStream is = new FileInputStream(caFile);
X509Certificate cer = (X509Certificate) fact.generateCertificate(is);
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(null, null);
keystore.setCertificateEntry("public", cer);
(편집하다)
결국 SSL이나 Elastic이 나에게 준 인증서와 관련이 없었습니다. 이것이 중요하다고 생각했기 때문에 결국 혼란스러운 지점이 되었습니다. 작동하는 nginx의 프록시 설정은 다음과 같습니다.
# Get the origin into a variable, for substitution into the header, below
map $http_origin $allow_origin {
~^https?://(.*\.)?incomingdomain.com(:\d+)?$ $http_origin;
default "";
}
proxy_redirect off;
add_header 'Access-Control-Allow-Origin' $allow_origin;
add_header 'Access-Control-Allow-Methods' 'OPTIONS, HEAD, GET, POST, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type, Content-Length, Authorization';
location /ElasticSearch/someSearch {
proxy_pass https://elasticdomain/_search;
}
답변1
이는 불가능합니다. 인증서에서 인증서와 개인 키를 생성할 수 없습니다. 인증서는 공개로 간주되고 개인 키는 비밀로 유지되어야 하기 때문에 이것이 가능하다면 이는 큰 보안 문제가 될 것입니다.
...하지만 이것이 우리가 이 공개 키를 사용하여 비슷한 작업을 수행하는 방법입니다...
귀하가 표시하는 코드는 귀하의 요구 사항과 관련이 없습니다. 파일에서 인증서를 로드할 뿐입니다( generateCertificate
인증서를 생성하지 않고 인증서만 생성합니다).물체기존 데이터에서). 아니요사적인여기서 키가 생성됩니다.
proxy_ssl_certificate /etc/nginx/client.pem; proxy_ssl_certificate_key /etc/nginx/client.key;
나는 당신이 애초에 잘못된 길을 가고 있다고 생각합니다. 귀하가 받은 인증서에 대한 유용한 세부 정보를 제공하지 않지만, 저는 이 인증서가 Elasticsearch 엔드포인트의 인증서라고 가정하고 이를 다음 용도로 사용해야 합니다.확인하다인증서가 예상된 인증서입니다. 이 경우 옵션을 사용해야 합니다.Proxy_ssl_trusted_certificate 파일그리고 거기에개인 키가 필요하지 않습니다이를 위해.
대신 당신이 하려고 하는 것과 proxy_ssl_certificate
하려는 것은 proxy_ssl_certificate_key
무엇인가?본인 인증즉, 인증서를 사용하여 서버에 대해 클라이언트 인증서로 사용합니다.