凌云 发布的文章

摘要

一般情况下,我们使用PHP开发的中、小型WEB应用基本是同步执行的,即基本遵从:①用户访问特定URL->②PHP执行对应业务函数(校验、查询数据库)-> ③返回响应结果。但对于稍微大型WEB应用,第②步骤可能会包含更多待处理的任务(如:发送短信、发送邮件、保存日志、获取第三方API结果等),这些任务甚至是非常消耗时间和消耗计算资源的,但又是和返回用户执行结果基本无关的。我们将这类计算任务在第②步骤时通过一种特定的通信方式快速高效的传递到后端其他服务器,这样可以尽可能快的响应用户的执行结果,同时减小入口服务器的压力,后端服务器将会监听到传入的任务并开始执行。此文中,我们在Symfony4.2中配置和应用RabbitMQ实现的异步处理计算任务。

- 阅读剩余部分 -

在已经EXPOSE映射端口的前提下,容器运行后,要想在您自己的本机电脑上访问到Docker中的laravel开发服务器,需要特别的在执行laravel命令时指定--host参数,否则本机无法访问,会导致laravel默认监听容器本身的IP。

php artisan serve --host=0.0.0.0

如果你的端口不是映射的默认的8000端口的话,你也可以用 --port参数来指定具体需要监听的容器端口。
这里最容易混淆的是127.0.0.1地址,因为容器和本机电脑都有自己的127.0.0.1地址,且这个地址只能访问到电脑自己。

前言

今天在这里主要总结一下使用SSL的过程中遇到的坑(注意事项)。SSL是什么东西?(请自行搜索)

我(叫龙君)接触SSL证书已经4年了,算上今年,最开始我认为SSL证书就是拿回来安装上就可以使用的。后来发现其实不然,我们还需要去了解SSL证书信任过程和什么是信任证书链。因为大部分客户都不了解这些,购买了证书后安装使用都会出现”不信任”的问题。下面就是总结常见的5中导致SSL证书不信任的原因。

1.SSL证书不是来自公认的证书颁发机构(CA)
我们但凡了解过SSL证书的朋友都明白,我们自己就可以给自己颁发数字证书(SSL证书、邮件证书、客户端证书、代码证书等),自己签发的证书不需要一分钱。然而自签发的数字证书默认是不受到客户端操作系统信任的,所以他们访问我们的站点的时候就会提示不信任。

另一方面,公认的证书颁发机构的CA证书就是默认内置在我们的操作系统或者浏览器当中的,也就是客户端操作系统默认信任的证书。

所以,我们首先需要购买可信的证书颁发机构颁发的数字证书,这一点很重要。常见的公认数字证书颁发机构有Startcom、Comodo、Geotrust、Globalsign等。

2.数字证书信任链配置错误
我们接触了很久的数字证书,基本很少有颁发机构会使用他们的根证书直接签发客户端证书(End User Certificate), 这可能是出于安全考虑,当然也不排除部分证书颁发机构支持这样做(但是价格很惊人)。他们都选择用自己的二级证书进行颁发客户端证书,比如你购买的EV SSL绿色地址栏证书,签发的证书链大概就如下图:

|---Londry Root CA
  |---Londry EV SSL CA G2  (中级CA)
    |---www.yourdomain.com

如果不配置中级CA,操作系统就无法确定SSL证书的真正颁发者是谁。

这个时候我们的证书和被受到信任的根证书就存在一个中间证书,这个叫中级证书颁发机构CA。如果操作系统默认只内置了根证书颁发机构,而我们直接安装的是自己的域名证书。这个时候证书链就不完整,就会被标记为受信任。为了解决这个问题,我们需要在服务器配置安装SSL证书的时候也同样要使得我们的证书链完整,才能正常使用。相关的各个平台的证书链配置我们也会在后面的文章给大家专门码字说明。

3.证书的域名匹配程度不完整
多数情况下我们的证书颁发机构都会为我们的域名做完整的匹配,但有些时候某些证书颁发机构可能会疏忽,我就遇见过。当我们为自己的域名比如londry.cn申请数字证书的时候,我们的CSR当中仅定义了londry.cn这一个顶级域名,并未添加更多域名DNS(可叫证书备用名称)记录。那么当你证书颁发的时候访问www.londry.cn就不会受到信任,会提示你该证书不是这个域名的。

这个时候你应该联系证书颁发机构或证书提供商进行重新签发并包含该域名,默认情况下的单域名证书是同时包含www.londry.cn和londry.cn的。

4.证书已经过了有效期
如果你的证书不是新买的,你应该注意你的数字证书已经过了有效期或这靠近有效期截止日期,你应该联系提供商进行续费。另外如果你的证书来自某些不正常的渠道,你也应该要确定一下你的证书是否已经被吊销,任何情况你都应该立即联系你的证书服务提供商。

5.客户端不支持SNI协议
这种事情只会发生在客户使用的操作系统是Windows XP SP2以下,Android4.2以下的情况,因为这些操作系统实在是太早了。当时系统厂商并未有支持这个SNI协议。

SNI协议就是让多个支持SSL证书的域名共享同一个独立IP地址的技术,现在已经被几乎所有主流操作系统和浏览器支持了。在很多年以前,SSL证书是需要绑定到独立IP地址使用的,由于IPv4地址池的逐渐不够分配,SNI技术应运而生了。