今天打开中国移动家的WIFI,然后进入我自己的科学小机场,发现里面!居然!出现了!广告!!
首先我的网站是不可能投放广告的,(对,也没有人找我接广告),而服务器又是国外某大厂的,更不可能出现广告。
所以只有一个情况,网络被某动运行商劫持了。
于是我决定要给我的小机场加个小绿锁了。
经过一通计算机基础操作,我把网站成功加上了https
。于是我兴冲冲地把我的小网站拿去给朋友分享。
然后朋友吐槽我邮件怎么那么慢,一分钟了都没发送成功
我:????
我为了稳定性(懒)直接用的巨硬家的邮件服务,端口开放,我的服务器倒了巨硬的都不会,为什么会邮件发送失败?昨天还好好的...
我第一时间测试了一遍,果然!发送失败了....
然后我又在本地用相同配置测试了一遍,一切正常。
我第一时间怀疑的就是https
的锅。
将 SMTP
的 debug level 调整到 2
后,出现了更多的报错信息:SSL routines:ssl3_get_server_certificate:certificate verify failed
证书验证失败。
我开始笃定跟https
有关,又拿不出证据。
万能的Google
啊
啊....
啊...
啊..
好了,找到了。
Google :你PHP的OpenSSL
扩展没开
我 :扯犊子呢,我开了。再说,没开扩展我昨天怎么发送出去的。
Google : Emmmmmm......
我:Emmmmm????
Google:你的PHP
找不到默认的根证书导致的这个问题,一般OpenSSL
不会自带根证书,需要你自己搞一个放到根目录
我:去哪搞?
Google:这有一个神奇的链接:http://curl.haxx.se/ca/cacert.pem
我:下好了,放哪?
Google:放到PHP的根证书的目录啊
我:???目录在哪?
Google:....你执行这一段就知道了php -r "print_r(openssl_get_cert_locations());"
我:返回这个东西:
[root@vultr ~]# php -r "print_r(openssl_get_cert_locations());"
Array
(
[default_cert_file] => /usr/local/openssl/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/local/openssl/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/local/openssl/ssl/private
[default_default_cert_area] => /usr/local/openssl/ssl
[ini_cafile] => /etc/pki/tls/certs/ca-bundle.crt
[ini_capath] =>
)
Google:看到那个default_cert_file
了吗?把你下载的文件改成相同名字的cert.pem
,然后放到default_cert_file
对应的目录下就行了
我:我都看不到ssl
文件夹....
Google:没有文件夹就新建一个,别那么多废话
我:诶?真的有用!真棒!不枉我整天费劲去上你
Google:......
至此,邮件功能又恢复正常了。
评论 (0)