小编的网站使用帝国cms制作,之前由于需要进行大量数据计算,所以使用火车采集器抓取网站信息列表,获取到信息列表后再从其他服务器上进行计算,以此分担主服务器计算压力。
最近由于更换了主服务器,抓取服务器上的火车采集器无法再成功获取信息,通过火车采集器的测试工具抓取,返回信息如下:
折叠XML/HTML 代码
- System.NullReferenceException: 未将对象引用设置到对象的实例。
- 在 Lv.Http.HttpProc.Proc(HttpWebRequest OO00O1l00OO0l)
- 在 Lv.Http.HttpProc.Proc()
- Void Proc(System.Net.HttpWebRequest)
接下来小编使用php的file_get_contents()方法尝试获取,提示错误信息如下。
折叠XML/HTML 代码
- Warning: file_get_contents(https://www.yanglaoditu.com) [function.file-get-contents]: failed to open stream: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? in D:\EmpireServer\web\aa.php on line 2
以此怀疑可能是服务器的openssl配置出了问题,服务器使用宝塔面板php5.3,查看php.ini发现无openssl配置,更加坚定的认为是服务器openssl配置有误,接下来通过phpinfo()打印服务器配置,发现openssl是正常开启的。
这就有些摸不到头脑了,接下来小编怀疑是ssl证书相关配置原因,因为服务器上开启https的网站都出现了该问题,但未开启ssl的网站抓取都是正常的。
小编换了一台机器再次尝试使用file_get_contents()方法获取,错误信息如下:
折叠XML/HTML 代码
- PHP Warning: file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: SSL operation failed with code 1. OpenSSL Error messages:
- error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version in C:\wwwroot\spiderserver\aa.php on line 2
- PHP Stack trace:
- PHP 1. {main}() C:\wwwroot\spiderserver\aa.php:0
- PHP 2. file_get_contents() C:\wwwroot\spiderserver\aa.php:2
- PHP Warning: file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: Failed to enable crypto in C:\wwwroot\spiderserver\aa.php on line 2
- PHP Stack trace:
- PHP 1. {main}() C:\wwwroot\spiderserver\aa.php:0
- PHP 2. file_get_contents() C:\wwwroot\spiderserver\aa.php:2
- PHP Warning: file_get_contents(https://www.yanglaoditu.com) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: operation failed in C:\wwwroot\spiderserver\aa.php on line 2
- PHP Stack trace:
- PHP 1. {main}() C:\wwwroot\spiderserver\aa.php:0
- PHP 2. file_get_contents() C:\wwwroot\spiderserver\aa.php:2
通过报告看出是SSL允许版本的问题,查看网站配置文件,SSL部分配置如下:
折叠XML/HTML 代码
- #SSL
- SSLEngine On
- SSLProtocol All -SSLv2 -SSLv3 -TLSv1
- SSLHonorCipherOrder On
这下就明确了,是宝塔默认配置的SSL配置与线上SSL证书不符造成的,去掉-TLSv1后网站恢复正常。