6

私はEliBeanstalkでApi GatewayとApiを接続しようとしています。 Api Gatewayだけで私のapiをアクセス可能にしたいと思っています。このために私はバックエンドでクライアント側のSSL証明書の承認を使用しています(このawsの出版リンクのように:http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/getting-started-client-side-ssl-authentication.html)。だから私のarquitectureこのようなものです:ApiゲートウェイとElastic Beanstalk(クライアント側のSSL証明書)

API GATEWAY->弾性荷重のBALANCER-> EC2(Elastic Beanstalkで)

私のEC2のマシンは、nginxのとRubyを持っています。

接続は次のように動作します:

API GATEWAY - 私は、クライアントの認証を行っています> RUBY

- >(80 PORT) - >弾性ロードバランサ - >(443 PORT) - > nginxのNGINX。 ブラウザを使用してElastic Load Balancerにアクセスすると、400 Bad Request - NGINXエラーが表示されます。必要なSSL証明書が送信されませんでした(これは証明書を送信しないため正しい)。しかし、私はApiゲートウェイを使用してアクセスし、クライアント証明書を送信するとき、私は同じエラーを受け取ります(私はなぜ理解しません)。私はnginxのでSSL接続を設定する場合

、私は(多分これが問題である?)私が署名したSSL証明書を使用しています私の問題のため

その他かのう原因は、弾性ロードバランサでポート構成である(中絵)。バックエンド認証:無効です。これは問題ですか? Pictura Port Config ELB

私のnginxの構成は次のとおりです。

upstream my_app { 
    server unix:///var/run/puma/my_app.sock; 
} 

log_format healthd '$msec"$uri"' 
       '$status"$request_time"$upstream_response_time"' 
       '$http_x_forwarded_for'; 

server { 
listen  443 ssl; 
listen  [::]:443 ssl; 
server_name localhost; 
root   /usr/share/nginx/html; 

ssl on; 
ssl_certificate /etc/nginx/ssl/dev.crt; 
ssl_certificate_key /etc/nginx/ssl/dev.key; 
ssl_trusted_certificate /etc/nginx/ssl/api-gateway.pem; 
ssl_client_certificate /etc/nginx/ssl/api-gateway.pem; 
ssl_verify_client on; 

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; 
ssl_prefer_server_ciphers on; 
if ($ssl_client_verify = FAILED) { 
     return 495; 
} 
if ($ssl_client_verify = NONE) { 
    return 402; 
} 
if ($ssl_client_verify != SUCCESS) { 
    return 403; 
} 
try_files $uri/index.html $uri @my_app; 
    location @my_app { 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Host $server_name; 
    proxy_set_header Client-IP $remote_addr; 
      proxy_pass  http://my_app; 
    proxy_set_header X-Client-Verify $ssl_client_verify; 
    } 
# Load configuration files for the default server block. 
include /etc/nginx/default.d/*.conf; 
location/{ 
    proxy_pass http://my_app; # match the name of upstream directive which is defined above 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header gonzalo1 $ssl_client_verify; 
} 
error_page 404 /404.html; 
    location = /40x.html { 
} 
error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
} 

}

+0

doc linkは、Api Gtwクライアント証明書を使ってBeanstalkを呼び出すことについてではなく、クライアント証明書を使ってApi Gtwを呼び出すことに関するものです。私は何かを逃したのですか? Api Gtwのクライアント証明書は、Api Gtwを使って他のものを呼び出さないApi Gtwを呼び出すためのものです。 – fsenart

+0

@fsenart、私が理解するところによると、この場合の証明書はApiゲートウェイからのバックエンドへの呼び出し用であり、バックエンドはApiゲートウェイからの要求であることを認証することができます。リンクの最初の段落では非常に明確です。 –

+0

いいえ、@fsenart、クライアント証明書は、APIゲートウェイがアプリケーションサーバーに対して自身を認証するために使用します。 –

答えて

2

アマゾンAPIゲートウェイは、統合エンドポイントの自己署名証明書をサポートしていません。 Amazon Certificate Managerの証明書またはLet's Encryptを使用してみましたか?

+0

これも当てはまりますが、この特定の問題の原因ではありません。 OPの次の質問に対する答えは、ここでの解決策が新しいエラーを生成するときです。 :) –

+0

こんにちは、どこでnginxを使ってこれを達成することができましたか? –

+0

@Stefano AWS Certificate Managerを使用してクライアントサイド証明書(APIゲートウェイで提供されるもの)をプッシュするにはどうすればよいですか? ? アイデア、考え方 –

関連する問題