<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # SSL支持 --- [TOC] 本章將詳細講解如何制作證書以及如何開啟Swoole的SSL的單向、雙向認證。 ## 準備工作 選擇任意路徑,執行如下命令創建文件夾結構 ```shell mkdir ca cd ca mkdir private mkdir server mkdir newcerts ``` 在ca目錄下創建`openssl.conf`文件,文件內容如下 ``` [ ca ] default_ca = foo # The default ca section [ foo ] dir = /path/to/ca # top dir database = /path/to/ca/index.txt # index file. new_certs_dir = /path/to/ca/newcerts # new certs dir certificate = /path/to/ca/private/ca.crt # The CA cert serial = /path/to/ca/serial # serial no file private_key = /path/to/ca/private/ca.key # CA private key RANDFILE = /path/to/ca/private/.rand # random number file default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # message digest method to use unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. policy = policy_any # default policy [ policy_any ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = match localityName = optional commonName = optional emailAddress = optional ``` 其中,`/path/to/ca/`是ca目錄的絕對路徑。 ## 創建ca證書 在ca目錄下創建一個shell腳本,命名為`new_ca.sh`。文件內容如下: ```bash #!/bin/sh openssl genrsa -out private/ca.key openssl req -new -key private/ca.key -out private/ca.csr openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt echo FACE > serial touch index.txt openssl ca -gencrl -out private/ca.crl -crldays 7 -config "./openssl.conf" ``` 執行`sh new_ca.sh`命令,創建ca證書。生成的證書存放于private目錄中。 > **注意** 在創建ca證書的過程中,需要輸入一些信息。其中,countryName、stateOrProvinceName、organizationName、organizationalUnitName這四個選項的內容必須要填寫,并且需要記住。在生成后續的證書過程中,要保證這四個選項的內容一致。 ## 創建服務端證書 在ca目錄下創建一個shell腳本,命名為`new_server.sh`。文件內容如下: ```bash #!/bin/sh openssl genrsa -out server/server.key openssl req -new -key server/server.key -out server/server.csr openssl ca -in server/server.csr -cert private/ca.crt -keyfile private/ca.key -out server/server.crt -config "./openssl.conf" ``` 執行`sh new_ca.sh`命令,創建ca證書。生成的證書存放于server目錄中。 ## 創建客戶端證書 在ca目錄下創建一個shell腳本,命名為`new_client.sh`。文件內容如下: ```bash #!/bin/sh base="./" mkdir -p $base/users/ openssl genrsa -des3 -out $base/users/client.key 1024 openssl req -new -key $base/users/client.key -out $base/users/client.csr openssl ca -in $base/users/client.csr -cert $base/private/ca.crt -keyfile $base/private/ca.key -out $base/users/client.crt -config "./openssl.conf" openssl pkcs12 -export -clcerts -in $base/users/client.crt -inkey $base/users/client.key -out $base/users/client.p12 ``` 執行`sh new_ca.sh`命令,創建ca證書。生成的證書存放于users目錄中。 進入users目錄,可以看到有一個`client.p12`文件,這個就是客戶端可用的證書了,但是這個證書是不能在php中使用的,因此需要做一次轉換。命令如下: ```shell openssl pkcs12 -clcerts -nokeys -out cer.pem -in client.p12 openssl pkcs12 -nocerts -out key.pem -in client.p12 ``` 以上兩個命令會生成cer.pem和key.pem兩個文件。其中,生成key.pem時會要求設置密碼,這里記為`client_pwd` > **注意** 如果在創建客戶端證書時,就已經給client.p12設置了密碼,那么在轉換格式的時候,需要輸入密碼進行轉換 ## 最終結果 以上步驟執行結束后,會得到不少文件,其中需要用的文件如下表所示: | 文件名 | 路徑 | 說明 | | --- | --- | --- | | ca.crt | ca/private/ | ca證書 | | server.crt | ca/server/ | 服務器端證書 | | server.key | ca/server/ | 服務器端秘鑰 | | cer.pem | ca/client/ | 客戶端證書 | | key.pem | ca/client/ | 客戶端秘鑰 | # SSL單向認證 ## Swoole開啟SSL Swoole開啟SSL功能需要如下參數: ```php $server = new swoole_server("127.0.0.1", "9501" , SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL ); $server = new swoole_http_server("127.0.0.1", "9501" , SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL ); ``` 并在swoole的配置選項中增加如下兩個選項: ```php $server->set(array( 'ssl_cert_file' => '/path/to/server.crt', 'ssl_key_file' => '/path/to/server.key', )); ``` 這時,swoole服務器就已經開啟了單向SSL認證,可以通過`https://127.0.0.1:9501/`進行訪問。 # SSL雙向認證 ## 服務器端設置 雙向認證指服務器也要對發起請求的客戶端進行認證,只有通過認證的客戶端才能進行訪問。 為了開啟SSL雙向認證,swoole需要額外的配置參數如下: ```php $server->set(array( 'ssl_cert_file' => '/path/to/server.crt', 'ssl_key_file' => '/path/to/server.key', 'ssl_client_cert_file' => '/path/to/ca.crt', 'ssl_verify_depth' => 10, )); ``` ## 客戶端設置 這里我們使用CURL進行https請求的發起。 首先,需要配置php.ini,增加如下配置: ``` curl.cainfo=/path/to/ca.crt ``` 發起curl請求時,增加如下配置項: ```php $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 只信任CA頒布的證書 curl_setopt($ch, CURLOPT_SSLCERT, "/path/to/cer.pem"); curl_setopt($ch, CURLOPT_SSLKEY, "/path/to/key.pem"); curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM'); curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '******'); // 創建客戶端證書時標記的client_pwd密碼 ``` 這時,就可以發起一次https請求,并且被swoole服務器驗證通過了。
                  <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>

                              哎呀哎呀视频在线观看