PHPはSSLクライアント証明書情報を取得する

1856 ワード

プロジェクトはクライアントの証明書情報を取得する必要があります.httpsはすべてパスして、証明書とkeyだけがウェブサイトにログインすることができますが、それをするには、対応する証明書は対応するアカウントにログインするしかありません.これは自分のkeyがあって、対応するアカウントのパスワードを知ってから上陸することができます.
前にもやったことがないので、いろいろ調べましたが、phpのケースはほとんど見つからず、最後に大神の文章を探しました.https://cweiske.de/tagebuch/ssl-client-certificates.htm
次に、どのように実現したのかを説明します.
まずSSLサーバ、httpsなどが配置されているので、ここでは詳しくは述べませんが、文章はたくさんあります.
SSLベースのvirtual host構成はこうです

    ServerName bookmarks.cweiske.de
 
    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog /var/log/apache2/access_log vcommon
 
    VirtualDocumentRoot /home/cweiske/Dev/html/hosts/bookmarks.cweiske.de
    
        AllowOverride all
    
 
    SSLEngine On
    SSLCertificateFile /etc/ssl/private/bookmarks.cweiske.de-cacert.pem
    SSLCertificateKeyFile /etc/ssl/private/bookmarks.cweiske.de.key
 
    SSLCACertificateFile /etc/ssl/private/cacert-1and3.crt

そして、サーバがクライアントの証明書情報SSLを取得できるようにする.confは次のように構成します.
    ...
    
 
    SSLVerifyClient optional
    SSLVerifyDepth 1
    SSLOptions +StdEnvVars

SSLterifyClientの後に2つのパラメータoptionalとrequireを選択することができます.optionalは証明書の検証なしにログインすることができますが、requireは必ず証明書にログインする必要があります.自分で選ぶ.
SSLterifyDepthは検証の深さで、1を記入すれば十分です
SSLOptions+StdEnvVarsこれが最も重要で、これはweb側でクライアントの情報を取得することができます.
テストページに次のコードを記述します.

証明書には、次のような情報がすべて出力されます.
SSL_SERVER_S_DN_C]=>国[SSL_SERVER_S_DN_ST]=>省[SSL_SERVER_S_DN_L]=>都市等の情報
 [SSL_CLIENT_S_DN_Email] => ****@*****.com証明書生成メールボックス
[SSL_CLIENT_S_DN_G]=>****証明書所有者
では、証明書対応アカウントの登録が実現し、そこからデータを選択してデータベースを保存し、ユーザーが登録したときに再確認します.
ps:詳しくは書いていませんが、何か間違いがあったら大神さんに指摘してください.