我需要一种在Windows 10 Universal应用程序中实现证书或公钥锁定的好方法.所有代码都在C#中,并且所有连接都是HTTPS,因此Windows.Web.Http.HttpClient该类的内容非常棒.是否有一个简单的类/库,或者至少是一个循序渐进的指南,如何实现这些可以由不知道X.509证书的神秘细节的人安全地完成的东西?
我发现的一些事情谈论使用本机代码或OpenSSL等第三方库(非常复杂!).我找到的最好的事情是这个问题,关于WP8.0钉扎,其中包括一个代码示例,应在WP8.1工作,希望也Win10,但它是一种丑陋和混乱,我不知道如何在发送包含敏感信息的请求时,要求服务器的证书是固定证书之一.由于检查时间/使用时间(TOCTOU)攻击,事先检查似乎不安全(除非HttpRequestMessage.TransportInformation函数打开连接然后保持打开,因此攻击者没有机会获得一个输入 - 新连接的中间位置).理想情况下,有一种方法可以过滤HttpClient,因此它只连接到带有固定证书的服务器,但我能找到的最接近的东西恰好相反(忽略某些证书错误,如此处所述)通过HttpBaseProtocolFilter.IgnorableServerCertificateErrors属性,似乎没有任何限制有效证书的选项.
这有人有一个很好的解决方案吗?如果HttpRequestMessage.TransportInformation方法(使用自定义证书验证代码)是唯一选项,那么在发送请求之前检查该属性是否可以安全地防止TOCTOU攻击?
UWP应用程序是否可以使用任意命令行参数启动其桌面桥(完全信任的应用程序组件)?我看到了指定"参数组"的功能(请参阅https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher),但它看起来只支持使用预定义ParameterGroup.我需要以编程方式确定(在启动时)任意命令行参数来启动UWP.这是可能的,如果是的话,怎么样?
command-line-arguments windows-10 uwp windows-10-universal desktop-bridge
有没有办法在同一个包中的 UWP 应用程序和桌面桥应用程序之间共享互斥锁?它们似乎有不同的命名空间;使用相同的名称不会在进程之间产生相同的对象。根据 ,UWP 应用程序的对象WinObj存储在一个特殊的命名空间下,AppContainerNamedObjects\{APP_SID}而不是BaseNamedObjects像往常一样。然而,桌面应用程序——尽管从同一个应用程序包运行——确实使用了BaseNamedObjects命名空间,因此两个进程不能共享同步对象。
有没有办法解决?我想到的最好的事情涉及检查文件是否存在等愚蠢的事情,但这既过于复杂又表现不佳。互斥体简单、快速,专为这个用例而设计(跨进程同步);它们不能在这里使用吗?
Windows API包含一个名为的有用函数DuplicateHandle,可用于将HANDLE(文件,注册表项,进程,互斥体等)从一个进程传输到另一个进程.这对于许多事情都很有用,包括编写沙箱时,有时代理进程会打开一个HANDLE(沙盒进程无法访问),然后将该HANDLE传递给沙箱.这类似于通过Unix域套接字在POSIX进程之间传递文件描述符.
遗憾的是,文档DuplicateHandle中没有提到服务句柄(类型SC_HANDLE,由API使用/返回OpenSCManager)作为支持的HANDLE类型.有没有办法在进程之间复制(或以其他方式传输)?
我正在开发一个大型 Mac 应用程序,该应用程序分为许多不同进程中的许多组件。其中一个组件是 Safari Extension Companion[1],它是一种“应用程序扩展”,允许基于 JavaScript 的扩展与本机代码对话(这是我们组件之间安全 IPC 所必需的)。IPC 通道是用户~/Library/Application Support/<APPNAME>/目录中的 Unix 域套接字。出于遗留原因,Unix 套接字服务器使用 HTTP,客户端库使用自定义URLProtocol,以防万一。
这适用于我们所有其他组件,但它们都没有在沙箱中运行[2]。但是,扩展伴侣的 Xcode 模板创建了一个沙箱,并且如果是沙箱,则伴侣会加载,但它似乎需要沙箱。我尝试在权利文件中设置com.apple.security.app-sandbox为false,或删除权利文件(以及对它的所有引用),两者似乎都阻止了 Safari 加载伴侣(如果直接调用它仍然作为自己的二进制文件运行,但 Safari 显然赢了) t 触摸它)。
我已经向沙箱添加了例外,以允许它访问相关目录,并且直接访问 IPC 套接字;但这似乎还不够。尝试打开套接字时遇到的错误是EPERM(不允许操作),这并不能真正解释问题。在向权利添加例外并修复路径后,~/Library/现在可以按预期写入日志文件(也在 "real" 下)之类的内容。
此错误发生在connect调用套接字时(它返回 -1,表示错误,并且errno为 1 ( EPERM)),因此实际上从未尝试写入或读取套接字。这对我来说似乎很奇怪,因为 - 根据Apple Sandbox Design Guide -
UNIX 域套接字很简单;它们就像任何其他文件一样工作
关于沙盒例外。
权利文件(使用此处的答案从自动生成的模板中修改:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict> …Run Code Online (Sandbox Code Playgroud)