<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # SSL/TLS高強度加密:如何...? > 這個問題的解決方案是簡單而且直接的,只是為了給讀者做做練習。 > > -- &lt;cite class="calibre63"&gt;標準教科書&lt;/cite&gt; 由于SSL、HTTP、Apache三者共同對請求進行處理,這使得在支持SSL的web服務器上實現特殊的安全制約變得不那么簡單。本節介紹了普通情況下的解決方案,作為找出最終方案的第一步。采用這些方案以前,先要盡量地去理解,不了解其限制和相關性就貿然使用是最糟糕的了。 ## 加密方案和強制性高等級安全 * [僅使用SSLv2的服務器](#calibre_link-140) * [僅接受高強度加密請求的服務器](#calibre_link-141) * [以服務器為網關的加密](#calibre_link-142) * [更強的針對目錄的加密需求](#calibre_link-143) ### 如何建立一個僅使用SSLv2的服務器? 可以這樣建立一個僅使用SSLv2協議及其密碼算法的服務器: ### httpd.conf ``` SSLProtocol -all +SSLv2 SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP ``` ### 如何建立一個僅接受高強度加密請求的SSL服務器? 如下設置為僅使用最強的七種密碼算法: ### httpd.conf ``` SSLProtocol all SSLCipherSuite HIGH:MEDIUM ``` ### 如何建立一個僅接受高強度加密請求的SSL服務器,而又允許對外瀏覽器使用更強的加密? 這個功能被稱為以服務器為網關的加密(Server Gated Cryptography[SGC]),在隨mod_ssl發布的`README.GlobalID`文檔中有詳細說明。簡單地說就是:服務器擁有一個由來自Verisign的一個特殊的CA證書簽發的服務器身份證,從而在對外瀏覽器上實現高強度加密。其過程如下:瀏覽器使用對外密碼進行連接,服務器返回其全局ID身份證,瀏覽器校驗后在后繼HTTP通訊產生之前提升其密碼組。現在的問題是:如何允許這樣的提升,而又強制性地使用高強度加密。換句話說就是:瀏覽器必須在開始連接時就使用高強度加密,或者提升到高強度加密,但是維持對外密碼是不允許的。以下巧妙地解決了這個問題: ### httpd.conf ``` # 允許在初始握手階段使用所有的密碼,以允許對外服務器通過SGC功能提升密碼組 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL <Directory /usr/local/apache2/htdocs> # 但是最終會拒絕所有沒有提升密碼組的瀏覽器 SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 </Directory> ``` ### 如何建立接受所有類型密碼的SSL服務器,但對特定的URL實施高強度加密? 顯然,不能使用服務器全局設置`SSLCipherSuite`,它會限制密碼為強類型。但是,mod_ssl允許重配置針對目錄的密碼組,并自動進行一個帶有服從新配置的SSL參數的重協商。因此,其解決方案成了: ``` # 在一般情況下的處理是寬松的 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL <Location /strong/area> # 但對于 https://hostname/strong/area/ 及其以下的內容要求高強度密碼 SSLCipherSuite HIGH:MEDIUM </Location> ``` ## 客戶認證和訪問控制 * [簡單的基于證書的客戶認證](#calibre_link-145) * [選擇性的基于證書的客戶認證](#calibre_link-146) * [特殊的基于證書的客戶認證](#calibre_link-147) * [intranet和internet的認證](#calibre_link-148) ### 在知道所有客戶的情況下,如何實現基于證書的客戶認證? 如果你了解你的用戶群體(比如:一個封閉的用戶組),正如在一個Intranet中,則可以使用一般的證書認證。所有要做的事情只是,建立由你自己的CA證書簽發的客戶證書`ca.crt` ,并依此證書校驗客戶。 ### httpd.conf ``` # require a client certificate which has to be directly # signed by our CA certificate in ca.crt SSLVerifyClient require SSLVerifyDepth 1 SSLCACertificateFile conf/ssl.crt/ca.crt ``` ### 如何針對一個特定的URL對客戶實施基于證書的認證,而同時又允許任何客戶訪問服務器其余部分? 這又要用到`mod_ssl`提供的針對目錄的重配置功能: ### httpd.conf ``` SSLVerifyClient none SSLCACertificateFile conf/ssl.crt/ca.crt <Location /secure/area> SSLVerifyClient require SSLVerifyDepth 1 </Location> ``` ### 如何針對某些URL對特定的客戶實施基于證書的認證,而同時又允許任何客戶訪問服務器其余部分? 其關鍵在于對客戶證書的各個組成部分進行驗證,一般就是指驗證 Distinguished Name (DN) 的全部或部分。有基于`mod_auth_basic`和基于`SSLRequire`類型的兩種方法以驗證。第一種方法適合用于客戶完全屬于不同類型,并為_所有_客戶建立了密碼數據庫的情形;第二種方法適用于客戶都屬于一個被編碼寫入DN的公共分級的一部分的情形,因為匹配客戶會更容易。 第一種方法: ### httpd.conf ``` SSLVerifyClient none <Directory /usr/local/apache2/htdocs/secure/area> SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile conf/ssl.crt/ca.crt SSLCACertificatePath conf/ssl.crt SSLOptions +FakeBasicAuth SSLRequireSSL AuthName "Snake Oil Authentication" AuthType Basic AuthBasicProvider file AuthUserFile /usr/local/apache2/conf/httpd.passwd require valid-user </Directory> ``` ### httpd.passwd ``` /C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA /C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA /C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA ``` 第二種方法: ### httpd.conf ``` SSLVerifyClient none <Directory /usr/local/apache2/htdocs/secure/area> SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile conf/ssl.crt/ca.crt SSLCACertificatePath conf/ssl.crt SSLOptions +FakeBasicAuth SSLRequireSSL SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} </Directory> ``` ### 如何要求來自Internet的客戶使用強密碼的HTTPS,并對其訪問Intranet站點的子區域實施或者基本的或者客戶證書的認證,而同時又允許Intranet的客戶進行普通的HTTP訪問? 假設Intranet客戶的IP地址是192.160.1.0/24,Intranet站點子區域的URL是`/subarea` ,則可以在HTTPS虛擬主機以外這樣配置(以同時作用于HTTPS和HTTP): ### httpd.conf ``` SSLCACertificateFile conf/ssl.crt/company-ca.crt <Directory /usr/local/apache2/htdocs> # subarea以外的區域只允許來自Intranet的訪問 Order deny,allow Deny from all Allow from 192.168.1.0/24 </Directory> <Directory /usr/local/apache2/htdocs/subarea> # 在subarea以內,允許所有來自Intranet的訪問, # 但對來自Internet的訪問,僅允許HTTPS+Strong-Cipher+Password # 或者HTTPS+Strong-Cipher+Client-Certificate # 如果使用了HTTPS,則確保使用高強度加密 # 同時允許客戶以基本認證的形式認證 SSLVerifyClient optional SSLVerifyDepth 1 SSLOptions +FakeBasicAuth +StrictRequire SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 # 強制來自Internet的客戶使用HTTPS RewriteEngine on RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$ RewriteCond %{HTTPS} !=on RewriteRule .* - [F] # 允許網絡訪問和基本認證 Satisfy any # 控制網絡訪問 Order deny,allow Deny from all Allow 192.168.1.0/24 # HTTP基本認證 AuthType basic AuthName "Protected Intranet Area" AuthBasicProvider file AuthUserFile conf/protected.passwd Require valid-user </Directory> ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看