ブラウザがアクセスするには、一致するキーを持つ必要があるようにhttpトラフィックのSSHキーなどを設定できますか?
答え1
あなたが探しているもの相互SSL認証。
一般に配布される Web サーバーの場合Apacheそして一般的に展開されるSSL / TLSの実装OpenSSL、次のように進みなさい:
ほとんどのタスクを実行するopenssl
便利なスクリプトが一緒に配布されます。CA.sh
その場所はディストリビューションによって異なります。 Debian とその派生物では、以下を使って見つけることができます:
# apt-file search CA.sh
openssl: /usr/lib/ssl/misc/CA.sh
RedHatとその派生製品の(おおよその)等価物は次のとおりです。
# yum provides */CA
1:openssl-1.0.1e-4.fc18.x86_64 : Utilities from the general purpose cryptography library with TLS implementation
Repo : @updates
Matched from:
Filename : /etc/pki/tls/misc/CA
これは、CAを管理するために必要なディレクトリ構造の作成を簡素化する非常に単純なbashスクリプトです([ CA_default ]
openssl.cnfセクションで説明されています)。私はあなたがそれを使用し、それが実際に何をしているのかを確認することをお勧めします。
# ./CA.sh -help
usage: ./CA.sh -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify
スクリプトはopenssl.cnfで提供されているデフォルト値を使用するか、スイッチを使用して設定openssl $command
ファイルを引数として提供できます(そうでない場合は、ファイルの場所はディストリビューションによって異なり、上記の同じコマンドを使用できます。参照してください)ものはパッケージに提供されるものです。-config
CA.sh
openssl.cnf
openssl
次のセクションを変更する必要があります。
[ CA_default ]
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
[ req ]
default_bits = 2048
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = AU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Some-State
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Internet Widgits Pty Ltd
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
- CAの生成
openssl.cnf
必要に応じて編集したら、CA証明書を生成できます。このCAが認識されたサードパーティCAの署名を受け取る必要があるかどうかに応じて、自己署名CAまたはCSRを生成して署名を送信できます。
./CA.sh -newca
いくつかの質問が対話形式で表示され、角かっこ内にデフォルト値が表示されます。ここで変更したオプションを確認できますopenssl.cnf
。
- サーバー用の証明書の生成
同じスクリプトを使用してサーバーの証明書要求を生成できます。
./CA.sh -newreq
もう一度、いくつかの質問をするように求められます。その中で最も重要なのは、サーバーIPのDNS解決可能な名前と一致する必要がある証明書の一般的な名前です(または/etc/hosts
推奨されていない、解決するのが難しいなどの他の方法を使用できます)。メンテナンスと拡張)
あなたが受け取るのは証明書署名要求(CSR)です。これは、以前に作成した認証局(CA)によって署名されます。
./CA.sh -sign
- クライアント用の証明書の生成
手順を繰り返してCSRを作成し、CAに署名します。これを行うときは、一般名、組織、および組織単位のフィールドがどのように入力されるかを慎重に注意してください。これは、後でサーバーを構成するために必要なためです。
それぞれの秘密鍵と CA 証明書とともにクライアント証明書を配布するきちんとした方法は、p12 バンドルを使用することです。
openssl pkcs12 -export -in Certificates/client.pem -inkey client.key -certfile CA.pem -out clientcert.p12
- サーバー構成
参照するサーバーがApache Webサーバーであるとします。サーバー証明書を取得したら、VHOST
相互SSL認証で保護されているすべてのコンテンツを提供するように適切なコンテンツを構成できます。一例がphpmyadmin
ウェブホスティングです。これはApache 2.4サーバーで実行されるため、そのまま使用しないでください。必要に応じて再確認してテストしてください。
Listen 443 https
<VirtualHost 120.120.120.120:443>
DocumentRoot "/srv/www/html"
ServerAdmin [email protected]
SSLCACertificateFile /etc/pki/CA/cacert.pem
SSLCertificateFile /etc/pki/tls/private/company.com/newcert.pem
SSLCertificateKeyFile /etc/pki/tls/private/company.com/newkey.pem
SSLCARevocationCheck chain
SSLCARevocationFile /etc/pki/CA/crl/crl.pem
SSLEngine on
SSLStrictSNIVHostCheck on
SSLVerifyClient require
SSLVerifyDepth 5
ServerName phpmyadmin.company.com
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteCond %{HTTPS} !=on
RewriteRule . - [F]
ErrorLog "|/usr/sbin/rotatelogs -L /var/log/httpd/foo/error.log -f /var/log/httpd/foo/error.log.%Y%m%d 86400"
CustomLog "|/usr/sbin/rotatelogs -L /var/log/httpd/foo/access.log -f /var/log/httpd/foo/access.log.%Y%m%d 86400" logstash_json
<Directory /usr/share/bar/>
Require ssl
Require ssl-verify-client
SSLRequireSSL
SSLOptions +FakeBasicAuth +StrictRequire
SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 256
SSLRequire %{SSL_CLIENT_S_DN_O} eq "Awesome Company" \
and %{SSL_CLIENT_S_DN_OU} eq "Development" \
and %{SSL_CLIENT_S_DN_CN} in {"John Doe", "Jane Doe"}
SSLRenegBufferSize 131072
</Directory>
</VirtualHost>
必要に応じてディレクトリ固有のアクセス制御を使用できます。表示されるクライアント証明書は、ディレクティブによって課される制限に従う必要がありますSSLRequire
。つまり、組織、組織単位、および一般名の条件(またはその他の条件)と一致する必要があります。適合証明書フィールドが表示されます)。これらのフィールドはクライアント証明書から取得されます。
- 証明書失効リストの生成
クライアント証明書へのアクセスを取り消すには、CRLを生成する必要があります。これを実行するコマンド(CAディレクトリ構造の最上位にある場合):
openssl ca -config /path/to/openssl.cnf -gencrl -out crl/crl.pem
その後、必要に応じて以下を使用してクライアント証明書をキャンセルできます。
openssl ca -config /path/to/openssl.cnf -revoke clientcert.pem
引用:
答え2
はい、「クライアント証明書認証」と呼ばれ、スマートカードなどによく使用されます。
必要な製品によっては、正しく機能するのが複雑な場合があります。