Ruby Web サービスからクライアント X.509 証明書にアクセスするにはどうすればよいですか? クライアントはクライアント証明書を渡しており、ブラウザがそれを認証しているのは問題ありませんが、Ruby コードで証明書も確認したいと考えています。
これは Rails ではありません。たとえば、シナトラを使用して答えを探しています。そして、nginx や lighttpd などの Web サーバーから。
Ruby Web サービスからクライアント X.509 証明書にアクセスするにはどうすればよいですか? クライアントはクライアント証明書を渡しており、ブラウザがそれを認証しているのは問題ありませんが、Ruby コードで証明書も確認したいと考えています。
これは Rails ではありません。たとえば、シナトラを使用して答えを探しています。そして、nginx や lighttpd などの Web サーバーから。
たとえば、Sinatra アプリを実行するシン サーバーへのリバース プロキシとして、SSL が構成されたポート 443 でリッスンする Apache Web サーバーを使用して、これらを Apache VirtualHost 構成に追加できます。
RequestHeader set SSL-Client-M-Serial %{SSL_CLIENT_M_SERIAL}s
RequestHeader set SSL-Client-S-DN %{SSL_CLIENT_S_DN}s
RequestHeader set SSL-Client-I-DN %{SSL_CLIENT_I_DN}s
次に、Sinatra コードから、Rack 環境でこれらの値を見つけることができます。たとえば、次のようになります。
puts "#{request.env['HTTP_SSL_CLIENT_S_DN']}"
私は完全なクライアント証明書を持っていませんが、Apache で証明書を検証しているので問題ありません。