我已经浏览了互联网,但在使用TIdHTTP通过HTTPS连接时,没有找到关于如何验证证书的解决方案或方法.
我已经将IdSSLIOHandlerSocketOpenSSL组件连接为IOHandler,设置SSLModes等,但是当我浏览到https://s3.amazonaws.com时,它无法验证证书.
OpenSSL(Indy)给出
"使用SSL连接时出错.SSL3_GET_SERVER_CERTIFICATE:证书验证失败"
已成功加载OpenSSL库(使用WhichFailedToLoad进行检查).OnStatusInfo事件写入以下内容:
SSL状态:"在/初始化之前"
SSL状态:"在/初始化之前"
SSL状态:"SSLv2/v3写客户端问候A"
SSL状态:"SSLv3读取服务器问候A"
SSL状态:"SSLv3读取服务器证书B"
SSL状态:"SSLv3读取服务器证书B"
SSL状态:"SSLv3读取服务器证书B"
并且OnVerifyPeer,AOk = False.
我怎样才能让它正确验证.这是怎么回事?
感谢阅读,阿德里安
因此,过去几天我在互联网上搜索 API 安全“最佳实践”或技术,特别是从服务器到服务器(服务器到服务器)直接访问的 API。似乎有许多不同的意见,很难将它们整合为一个可行的想法。
许多人认为,OAuth 是必经之路。根据是否希望不使用安全套接字协议,可以分别选择 OAuth 1.0A 或 OAuth 2.0。
关于 OAuth,我的理解是 OAuth 1.0A 主要关注的是请求的数字标牌,而 OAuth 2.0 依赖底层 HTTPS 来保证完整性。那么我可以安全地做出以下假设吗?
假设:如果使用 HTTPS,则不需要使用 HMAC 或任何形式的数字签名来防止重放攻击、中间人攻击和保持完整性。
这仍然留下授权,OAuth 通过交换的令牌进行管理。但为什么这么复杂?例如,我是否可以为所有服务器(私人消费者)提供全局唯一的用户名和机密,以便每个“请求”都使用机密、用户名和请求参数的一些散列值进行“签名”?
据我所知,这意味着授权和身份验证。身份验证通过对哈希的确认进行管理,并且禁止授权,因为至关重要的是,每个服务器对自己的资源都具有相同的权限。
因此,在为服务器到服务器(或“两条腿”)通信设计 API 时,最好的方法是什么?简单地使用 HTTPS 是否安全,然后使用个性化散列对每个请求进行签名,这意味着身份验证、授权并且不需要维护状态/会话。
我可以理解,符合标准对开发人员编写代码以使用服务以及一般的网络文化是有益的,因此遵守 OAuth 的某些“子集”听起来很有吸引力;我只是不确定这里是否需要它。
在互联网上,我看到通常会将"TIdTCPClient"置于自定义TThread后代中......为什么这样做?
有时我也会在这样的线程中看到服务器......为什么?
干杯,阿德里安
我试图让 TIdTCPServer 实例中的每个连接线程将 TADOConnection 实例化到上下文中。
这工作正常,我将 CoInitialize(nil) 放在 OnConnect 事件处理程序中。问题是这个过程需要大约 20-25 秒才能工作,这太长了......
有什么建议吗?
干杯,阿德里安
关于我正在研究的项目使用的设计模式,我需要一些建议.假设我有很多类将使用依赖注入和IoC容器进行实例化.很多这些类将依赖于"环境"设置,例如依赖于服务器位置的memcached类,以及依赖于SQL主机详细信息的SQL类,但我不确定如何编写此依赖关系.
我可以将这些写入课堂,但它并不灵活.如果我让类使用全局变量,我觉得它们不再松散耦合,单元测试将更难完成.因此,如何保持松散的类耦合但是从中心位置维护这些设置?
如果服务器设置改变,我不想挖掘12个PHP脚本来更改每个设置.
理想情况下,我想:
干杯! 阿德里安