2018年3月28日 星期三

PHP CURL作法說明 +SSL說明


因為現在各大Oauth授權都需要使用HTTPS方式進行。

PHP本身如果使用CURL呼叫HTTPS網址,可能產生網頁return沒有反應的情況。

需要加入以下兩條程式碼

    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);

範例程式如下


    $graph_url = "https://graph.facebook.com/me?access_token="
      . $params['access_token'];
    
    $curl = curl_init($graph_url);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $user_data = curl_exec($curl);



2018年3月24日 星期六

網路中文 網域+SSL憑證申請

網路中文網址:https://www.net-chinese.com.tw/nc/
SSL憑證說明:https://wiki.net-chinese.taipei/sites/wiki.net-chinese.taipei/files/public_files/application/SSL%E6%86%91%E8%AD%89%E7%B0%A1%E6%98%93%E6%95%99%E5%AD%B8(Linux%20Apache).pdf

1.首先向中華電信申請固定IP,將電腦連線使用固定IP連線

2.購買域名 (800元)

3.將域名使用DNS代管,並新增DNS記錄設定

設定二組A記錄指向網頁IP
(A記錄第一組主機名稱填www   指向IP
             第二組主機名稱空白       指向IP).




















4.DNS記錄需要一段時間生效24~48小時。

5.購買SSL憑證 (800元)。

6.在電腦安裝openSSL (  C:\openssl\bin ) 

7.在openSSL底下使用指令

openssl genrsa -des3 -out server.key 2048

設定PEM密碼,將產生的server key放在

8. 產生CSR文件

openssl req -new -key server.key -out certreq.txt

填入資料如圖
.

將產生出來的CSR文件,提供給網路中文,讓網路中文可以開始申請憑證。


9.網路中文會傳送需要驗證的信件,且會取得憑證。





























10.將取得的憑證安裝 +server key 放在在電腦的apache   EX:C:\Apache24\conf 。

















11.  設定 C:\Apache24\conf\extra  下的  httpd-ssl.conf  檔案

將前面的 # 拿掉以啟用,並設定剛剛的檔案位置

SSLEngine on SSLCertificateKeyFile:/etc/ssl/ssl.key/server.key (私鑰檔案路徑) SSLCertificateFile:/etc/ssl/ssl.crt/憑證.crt (憑證檔案路徑) SSLCertificateChainFile:/etc/ssl/ssl.crt/中繼憑證.ca-bundle(中繼憑證檔案路徑)


12. 設定 C:\Apache24\conf  下的  httpd.conf  檔案

將以下 #拿掉以啟用

 LoadModule ssl_module modules/mod_ ssl.so 的 #註解
 Include conf/extra/httpd-ssl.conf    的 # 註解
 
設定DocumentRoot "c:/website/www" 的網站目錄


13.重啟apache ,使用https連線確定能不能正常連入










2018年3月11日 星期日

laravel smtp mail發送錯誤


網路上不同的人做法:
http://shian420.pixnet.net/blog/post/344687356-%5Blaravel%5D-gmail-smtp-%E5%BE%9E%E8%A8%AD%E5%AE%9A%E5%88%B0%E7%99%BC%E4%BF%A1



自己測試用做法:
原本運作正常的PHP laravel mail突然開始跳出錯誤

laravel stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed



Laravel 4.2的解決辦法:

Edit \vendor\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php

line 259 ish. comment out the $options = array(); and add the below.


//$options = array();
$options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);





如果使用gmail 需要在調整:

https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none

 gmail的安全性:[允許安全性較低的應用程式] 設定處於啟用狀態 這樣才能登入 

PS用laravel設定寄信 app\config\mail.php設定裡面需要確定


'driver' ='smtp',
'host' ='smtp.gmail.com',
'username' ='xxxxxxxxxxxxxx',
'password' ='xxxxxxxxxxxx',

 自己寫的controller code



$from = ['email'=>'whitebaiw@gmail.com',
         'name'=>'whitebaiw',
         'subject'=>'主旨'
        ];
//填寫收信人信箱
$to = ['email'=>'zxcvbnm2749@gmail.com',
       'name'=>'zxcvbnm2749'];
//信件的內容(即表單填寫的資料)
$data = [
         'subject'=>'主旨',
         'msg'=>'訊息'
         ];
//寄出信件
Mail::send('web.message.mailShowView', $data, function($message) use ($from, $to) {
    $message->from($from['email'], $from['name']);
    $message->to($to['email'], $to['name'])->subject($from['subject']);
        });


----------------------------------------------------------------------------------------------------------

 如果是使用LARAVEL 5.2且使用ssl 方式寄信 需要調整.env 檔案:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=xxxxx@gmail.com
MAIL_PASSWORD=xxxx
MAIL_ENCRYPTION=ssl