はじめに:
ここでは、通常のリクエストに加えて、「高度な秘密」でリクエストを受け入れる必要がある小さなAPIを書くのに何とかかかりました。
これに遭遇したのは私が初めてではなく、世界はそのようなことのために長い間SSLを使用してきました。
サーバーでnginxが使用されているため、 SSLモジュールがインストールされました
Googleは実行可能なハウツーを1つも提供しませんでしたが、ネットワーク上の情報は一部です。
したがって、 SSL証明書を介してクライアントを承認するためのnginxの設定に関するステップバイステップガイド 。
注意! この記事では、例として自己署名証明書を使用します!
開始する前に、nginx configにフォルダーを作成します。ここでの作業の成果は次のとおりです。
cd /path/to/nginx/config/ mkdir ssl && cd ssl
手順1.自己署名の信頼できる証明書を作成します。
クライアント証明書に署名し、Webサーバーでクライアントを承認するときにそれらを検証するには、個人の信頼できる証明書(認証局またはCA)が必要です。
以下のコマンドを使用すると、秘密鍵と自己署名証明書が作成されます。
openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -x509 -days 500 -subj /C=RU/ST=Moscow/L=Moscow/O=Companyname/OU=User/CN=etc/emailAddress=support@site.com -out ca.crt
引数の説明:
req新しい証明書の作成要求。
-new証明書署名要求(CSR)を作成します。
-newkey rsa:1023新しい1024ビットRSA秘密鍵が自動的に作成されます。 必要に応じてキーの長さを構成できます。
-nodes秘密鍵を暗号化しません。
-keyout ca.key ca.keyファイルに秘密鍵を保存します。
-x509 CSRを作成する代わりに(-newオプションを参照)、自己署名証明書を作成します。
-days 500証明書の有効期限は500日です。 有効期間のサイズは必要に応じて調整できます。 この証明書を使用してクライアント証明書に署名するため、小さな値を入力することはお勧めしません。
-subj /C=RU/ST=Moscow/L=Moscow/O=Companyname/OU=User/CN=etc/emailAddress=support@site.com
証明書データ、パラメーター=値のペアは、「/」でリストされます。 パラメータ値の文字は、バックスラッシュ「\」を使用して「切り捨て」ることができます(例:「O = My \ Inc」)。 引数を引用することもできます。たとえば、-subj“ / xx / xx / xx”。
ステップ2.サーバー証明書
nginxの証明書を作成して要求する
openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr
私たちは自分の署名で証明書に署名します
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
nginxが再起動時にパスワードを要求しないように、パスワードのない証明書のコピーを作成します
openssl rsa -in server.key -out server.nopass.key
Nginxの構成
listen *:443; ssl on; ssl_certificate /path/to/nginx/ssl/server.crt; ssl_certificate_key /path/to/nginx/ssl/server.nopass.key; ssl_client_certificate /path/to/nginx/ssl/ca.crt; ssl_verify_client on; keepalive_timeout 70; fastcgi_param SSL_VERIFIED $ssl_client_verify; fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial; fastcgi_param SSL_CLIENT_CERT $ssl_client_cert; fastcgi_param SSL_DN $ssl_client_s_dn;
これで、サーバーはhttps要求を受け入れる準備ができました。
証明書情報を持つ変数は、主にSSL_VERIFIED(値SUCCESSを取得)のバックエンドの変数に現れました。
ただし、サイトにアクセスしようとすると、エラーがスローされます。
400 Bad Request No required SSL certificate was sent
まあ、論理的に、それはすべての塩です!
ステップ3.クライアント証明書を作成する
3.1 CAの準備
構成を作成する
nano ca.config
次の内容で:
[ ca ] default_ca = CA_CLIENT # # CA_CLIENT [ CA_CLIENT ] dir = ./db # certs = $dir/certs # new_certs_dir = $dir/newcerts # database = $dir/index.txt # serial = $dir/serial # ( ) certificate = ./ca.crt # CA private_key = ./ca.key # CA default_days = 365 # default_crl_days = 7 # CRL default_md = md5 # policy = policy_anything # [ policy_anything ] countryName = optional # optional - , supplied - stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = optional emailAddress = optional
次に、構成ファイルに記述されているものに対応するディレクトリとファイル構造を準備する必要があります
mkdir db mkdir db/certs mkdir db/newcerts touch db/index.txt echo "01" > db/serial
3.2。 クライアント秘密鍵と証明書要求(CSR)の作成
署名済みのクライアント証明書を作成するには、最初に後続の署名用の証明書要求を作成する必要があります。 コマンド引数は、自己署名の信頼できる証明書の作成に使用される引数と完全に似ていますが、-x509パラメーターがありません。
openssl req -new -newkey rsa:1024 -nodes -keyout client01.key -subj /C=RU/ST=Moscow/L=Moscow/O=Companyname/OU=User/CN=etc/emailAddress=support@site.com -out client01.csr
コマンドの結果として、client01.keyとclient01.csrの2つのファイルが表示されます。
3.3。 信頼できる証明書(CA)を使用した証明書要求署名(CSR)。
要求に署名するときに、ca.configファイルで指定されたパラメーターが使用されます
openssl ca -config ca.config -in client01.csr -out client01.crt -batch
コマンドの結果として、クライアント証明書ファイルclient01.crtが表示されます。
次の証明書を作成するには、これらの2つの手順を繰り返します。
3.4。 クライアントブラウザー用のPKCS#12証明書の作成
これは、私の場合のように、ソウルレスなマシンがサーバーに接続されていない場合でも、ブラウザを介して生きている人がいる場合です。
パスワードで保護されたPKCS#12ファイルは、サイトにアクセスできるようにブラウザーにフィードする必要があります。
openssl pkcs12 -export -in client01.crt -inkey client01.key -certfile ca.crt -out client01.p12 -passout pass:q1w2e3
3.5 curlを使用して受信したsslサーバーへの接続
curl -k --key client.key --cert client1.crt --url "https://site.com"
例の証明書は自己署名されているため、-kオプションが使用されます
使用ソフトウェア
Ubuntu Server 10.10(Linux 2.6.35-22-server#35-Ubuntu SMP x86_64 GNU / Linux)
nginx 0.9.3
OpenSSL 0.9.8o 2010年6月1日
便利なリンク
- UbuntuでのOpenSSL
- クライアント証明書を生成するための一般的なSSL構成
- ssl nginx'aでのセットアップ(私にとってはうまくいきませんでした)
- ngx_http_ssl_moduleモジュール
それが誰かに役立つことを願っています。
PSこの投稿は2011年1月16日に私の最初の出版物で、古いコピーは削除されました(サイト管理者の要求により、アカウントに関連付けられていなかったため)。