- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
案例:我想打开到 localhost
的 SSL 连接,而 SSL 证书是 FQDN 的问题。
问题:如果 (*)
行中没有特殊处理,下面的程序将失败并显示以下消息:
PHP 警告:stream_socket_enable_crypto():对等证书 CN='myhost.com' 与 test.php 中预期的 CN='localhost' 不匹配
测试PHP程序:
$fp = stream_socket_client("tcp://localhost:993", $errno, $errstr, 30);
// (*) if commented, the program fails
//stream_context_set_option($fp, 'ssl', 'verify_peer_name', false);
if (!$fp) {
die("Unable to connect: $errstr ($errno)");
}
if (!stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
die("Failed to start SSL");
}
fwrite($fp, "USER god\r\n");
fwrite($fp, "PASS secret\r\n");
while ($motd = fgets($fp)) {
echo $motd;
}
fclose($fp);
因为我有很多遗留代码,我希望通过仅对 php.ini
(或 CLI)应用更改来获得解决方案,但不幸的是,以下均无效:
php -d verify_peer_name=false test.php
php -d ssl.verify_peer_name=false test.php
想法?
引用资料:
最佳答案
当 cafile
和 capath
同时runtime configuration和 SSL context options , verify_peer_name
和 verify_peer
只有SSL context options .
因此后面两个不能通过运行时配置指令进行修改。
我可以从下面复制的文档中理解混淆,但是这两段实际上指的是 PHP 中的两个不同概念。
The default CA bundle may be overridden on a global basis by setting either the openssl.cafile or openssl.capath configuration setting, or on a per request basis by using the cafile or capath context options.
While not recommended in general, it is possible to disable peer certificate verification for a request by setting the verify_peer context option to FALSE, and to disable peer name validation by setting the verify_peer_name context option to FALSE.
首先请注意,文档本身在 openssl.cafile
之间有明显的区别。和 openssl.capath
在全局范围内或在每个请求的基础上与verify_peer
和 verify_peer_name
仅请求。
所以这基本上意味着,当openssl.cafile
和 openssl.capath
可以通过 php.ini
进行调整或通过 stream_context_set_option
,另一方面verify_peer
和 verify_peer_name
只能通过 stream_context_set_option
访问.
PHP 源代码本身也证实了这一点,这里有一些行显示 PHP
垫层C
语言正在从 php_stream_context_get_option
获取值仅。
must_verify_peer_name = GET_VER_OPT("verify_peer_name")
? zend_is_true(val)
: sslsock->is_client;
Link to PHP github source code
为清楚起见,这里是宏 GET_VER_OPT
的声明
#define GET_VER_OPT(name) (PHP_STREAM_CONTEXT(stream) && (val = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", name)) != NULL)
Link to PHP github source code
当 cafile
和 capath
实际上首先与 php_stream_context_get_option
匹配值,但是,如果这些是 NULL
在上下文中,然后在 ini 配置中获取它们。
GET_VER_OPT_STRING("cafile", cafile);
GET_VER_OPT_STRING("capath", capath);
if (cafile == NULL) {
cafile = zend_ini_string("openssl.cafile", sizeof("openssl.cafile")-1, 0);
cafile = strlen(cafile) ? cafile : NULL;
}
Link to PHP github source code
然后在完全相同的函数中稍微降低一点:
if (capath == NULL) {
capath = zend_ini_string("openssl.capath", sizeof("openssl.capath")-1, 0);
capath = strlen(capath) ? capath : NULL;
}
Link to PHP github source code
为清楚起见,这里是宏 GET_VER_OPT_STRING
的声明
#define GET_VER_OPT_STRING(name, str) if (GET_VER_OPT(name)) { convert_to_string_ex(val); str = Z_STRVAL_P(val); }
Link to PHP github source code
您还可以看到,当这两个值 openssl.capth
和 openssl.cafile
被定义为现有 ini
配置,后面 verify_peer
和 verify_peer_name
无处可寻。
很遗憾,正如文档提示的那样,唯一的方法是通过 stream_context_set_option ( $stream_or_context , 'ssl' , 'verify_peer_name' , false )
为请求配置它。
在早已过去的历史中:这是这两个 SSL 上下文选项的默认值。根据文档的提示,它们在 PHP 5.6.0 版中发生了变化:
5.6.0 Added peer_fingerprint and verify_peer_name. verify_peer default changed to TRUE.
这意味着从 PHP < 5.6.0
升级 PHP 后会出现此类问题因此,通过使用 PHP
可以将这两个选项的默认值保持为 false版本低于 5.6.0
;但自从分支5.*.*
PHP 现在是 totally out of support这不再是一个可行的选择。
关于php - 如何在 PHP 5.6 中通过 php.ini 设置 'verify_peer_name=false' SSL 上下文选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26810218/
出现以下错误 Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable D
在调试应用程序时出现以下错误。 The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2
在 GAE Go 中,为了记录,我们需要使用 appengine.NewContext(r) 创建一个新的上下文,它返回 context.Context。 如何使用此上下文在请求范围内设置/获取变量?
我想使用 Puppeteer 从放置在页面上 iframe 内的选择器中获取数据,该页面在与其父框架域不同的域上运行。因此,我不是任何域的所有者 - 无法使用 frame.postMessage。 试
我正在尝试获取可用的应用程序上下文并想切换到 webview 上下文,但 appium 仅获取 Navive App。 应用程序还启用了 WebView。 Appium 版本:1.10.1 Chrom
这个问题在这里已经有了答案: How to fix this nullOk error when using the flutter_svg package? (7 个回答) 7 个月前关闭。 当我尝
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
这是代码 obj = { a: 'some value'; m: function(){ alert(this.a); } } obj.m(); 结果是'som
我正在尝试做类似的事情 $(".className").click(function() { $(this).(".anotherClass").css("z-index","1");
var User = { Name: "Some Name", Age: 26, Show: function() { alert("Age= "+this.Age)}; }; fun
我目前正在使用我见过的常见 Context 模式,它允许子组件通过传递修饰函数来更新父组件的状态(即 Provider)通过共享的 Context。 我遇到的问题是,修改函数只引用原始状态,不引用最新
有没有办法让 React Context类型安全与流类型? 例如: Button.contextTypes = { color: React.PropTypes.string }; 最佳答案 不幸
我想知道是否有一种方法可以为不同的功能使用不同的上下文类。 我希望有一个功能使用 MinkExtensions 进行浏览器测试,另一个功能使用和 HTTP 客户端(如 Guzzle)进行 API 测试
我有这个配置文件 apiVersion: v1 clusters: - cluster: server: [REDACTED] // IP of my cluster name: stag
我在实现非抢先式调度时遇到了用于初始化TCB的代码。 typedef struct TCB_t { struct TCB_t *next; struct TCB_t
我想将一个函数设置为数组中每个元素的属性,但使用不同的参数调用它。我想我会使用匿名函数来解决它: for ( var i = 0; i < object_count; i++ ) { obje
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 7 年前。 我正在做一些练习,但我在管道方法中丢
我正在尝试通过 Java 和 Android Studio 学习和制作 Android 应用程序。我对Java的了解程度是两年前几个小时的youtube学习和大学基础类(class)。不过我确实知道如
我在(这个)上遇到了问题。错误ImageView无法应用。我在 fragment 类中执行此代码。 ViewFlipper v_flipper; @Nullable @Override public
我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖性的情况下创建它(不是对 Windows,也不是某些包[SDL,SFML,GLUT])?只允许使用没有外部库的库,就像
我是一名优秀的程序员,十分优秀!