公開鍵のみを使用して nginx のキーを生成する

公開鍵のみを使用して nginx のキーを生成する

Elasticsearchエンドポイントをサービスとして持っています(config/serverにはアクセスできません)。このサービスではユーザー名とパスワード、そして1つの「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認証する証明書を持つサーバーに対して、つまりクライアント証明書として使用します。

関連情報