Linux上的PHP HTTPS
HTTP協(xié)議是Internet通信的基礎(chǔ),但是HTTP不加密通信,網(wǎng)絡(luò)上傳輸數(shù)據(jù)容易被竊聽、劫持、篡改和偽造,解決這個問題需要使用HTTPS。HTTPS是HTTP協(xié)議的加密協(xié)議,是HTTP協(xié)議的安全版,HTTPS協(xié)議使用了SSL或者TLS協(xié)議進行數(shù)據(jù)加密。
那么在Linux上,如何實現(xiàn)使用PHP開發(fā)的HTTPS應用呢?
首先,需要準備好SSL/TLS證書,獲取證書的方法有兩種,一種是自行生成證書,另一種是從數(shù)字證書授權(quán)機構(gòu)(CA)獲取證書。
如果是自己生成證書,可以使用openssl命令生成證書:
openssl req -new -x509 -days 365 -nodes -out example.crt -keyout example.key
如果是從數(shù)字證書授權(quán)機構(gòu)獲取證書,就需要先向CA申請證書,然后按照CA的要求將證書部署到服務器上。
擁有證書之后,就可以在PHP中啟用HTTPS協(xié)議了。PHP提供了兩種啟用HTTPS協(xié)議的方式,一種是使用PHP內(nèi)置函數(shù),另一種是使用Web服務器的配置。
使用PHP內(nèi)置函數(shù)開啟HTTPS,可以使用stream_socket_server函數(shù)或者socket_create函數(shù)實現(xiàn):
$context = stream_context_create(['ssl' =>[ 'local_cert' =>'example.crt', 'local_pk' =>'example.key', ]]); $server = stream_socket_server('ssl://0.0.0.0:443', $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); while ($conn = stream_socket_accept($server)) { fwrite($conn, 'HTTP/1.1 200 OK' . PHP_EOL . PHP_EOL . 'Hello, world!'); fclose($conn); } fclose($server);
使用Web服務器的配置來啟用HTTPS,則需要在Web服務器的配置文件中添加SSL/TLS配置:
SSLEngine on SSLCertificateFile /path/to/example.crt SSLCertificateKeyFile /path/to/example.key
一旦啟用了HTTPS,就可以在PHP代碼中使用$_SERVER['HTTPS']來判斷當前是否會話已經(jīng)被加密:
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { echo 'This session is secure.'; } else { echo 'This session is not secure.'; }
總之,多年來,HTTPS已經(jīng)成為了互聯(lián)網(wǎng)安全的標準,對于使用PHP開發(fā)HTTPS應用的程序員,要保證代碼嚴謹、邏輯清晰,同時要注重數(shù)據(jù)的安全,保護用戶隱私,切勿掉以輕心。