亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 SSL 的 PDO 連接到遠程數據庫;驗證服務器證書時出現 FastCGI 錯誤

使用 SSL 的 PDO 連接到遠程數據庫;驗證服務器證書時出現 FastCGI 錯誤

PHP
慕的地8271018 2021-12-24 15:40:26
我有一個帶有 MariaDB DB 的遠程服務器,它只接受特定用戶的 SSL 連接,并使用以下內容生成了一些自簽名 SSL 證書# Create CA certificateopenssl genrsa 2048 > ca-key.pemopenssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem# Create server certificate, remove passphrase, and sign it# server-cert.pem = public key, server-key.pem = private keyopenssl req -newkey rsa:2048 -days 3600         -nodes -keyout server-key.pem -out server-req.pemopenssl rsa -in server-key.pem -out server-key.pemopenssl x509 -req -in server-req.pem -days 3600 \        -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem我填寫了每個證書的詳細信息如下國家名稱: GB地區名稱: 公司鎮機構名稱:公司名稱通用名稱:DEV CA、DEV Server、DEV Client (分別)并將所有其他字段留空遠程服務器中有以下內容 my.cnf[mariadb]ssl-ca=/path/to/ca.pemssl-cert=/path/to/server-cert.pemssl-key=/path/to/server-key.pem我可以通過在本地機器的命令行中包含以下內容進行連接 my.cnf[client]ssl-ca=/path/to/ca.pemssl-cert=/path/to/client-cert.pemssl-key=/path/to/client-key.pem我可以使用以下命令從本地計算機創建 PDO 連接$pdo = new PDO(    'mysql:host=xxx.xxx.xxx.xxx;dbname=database_1',    'database_user',    'database_password',    [       PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,       PDO::MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem',       PDO::MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',       PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca.pem',    ]);不幸的是,如果我刪除該行PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,我收到內部服務器錯誤,以下內容顯示在我的 MAMP PRO apache 錯誤日志中… FastCGI: incomplete headers (0 bytes) received from server …我的 PHP 錯誤日志中沒有錯誤我只能假設證書驗證出了問題,我錯過了什么嗎? 和/或將PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERTset 設置為 false 是否安全?
查看完整描述

2 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

當客戶端驗證服務器證書時,將檢查以下內容

  • 簽名

  • 證書有效期包括當前時間

  • 證書未被撤銷(CRL 的一部分)

  • 主機名與 CN 或備用名稱匹配

  • 根ca

帶有 mysqlnd 的 PDO 使用 PHP 流,它只檢查 CN 字段,而不檢查主題備用名稱字段。根據您的代碼,您指定要連接的 IP 地址,而不是名稱。

不幸的是,PHP 也沒有提供額外的方法來檢查對等證書的 sha 指紋。


查看完整回答
反對 回復 2021-12-24
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

將 PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT 設置為 false 是否安全?

在大多數情況下,如果對您的服務器的訪問是安全的,那么這樣做是安全的,盡管不推薦這樣做。

失敗的原因是 TLS(SSL) 證書被授予主機訪問地址,其中主機訪問地址是 IP 地址或主機名,而不是物理主機。所以你的 Common Name 應該是服務器的 IP 地址或主機名;使用哪個是您必須使用的連接到服務器。

因此,當您連接到主機 xxx.xxx.xxx.xxx(來自'mysql:host=xxx.xxx.xxx.xxx;dbname=database_1')時,證書上的 Common Name 需要為 xxx.xxx.xxx.xxx


查看完整回答
反對 回復 2021-12-24
  • 2 回答
  • 0 關注
  • 253 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號