首先,请注意我是配置SSL的新手.在过去,我总是很幸运有一个IT部门可以提前为我做好准备.因此,请准备好我可能需要澄清你的一些答案.=)
我正在尝试做什么
我正在为员工建立一个公司内联网网站.例如,将有一个浏览器起始页面,显示为每个员工定制的内容.因此,我需要能够识别所述员工而无需任何用户名/密码或其他提示(虽然一次性设置是可以的;我只是不希望每次都提示他们).当然,SSL似乎是实现这一目标的最佳方式.
我将使用MySQL数据库设置将"用户"帐户与SSL_CLIENT_M_SERIAL和SSL_CLIENT_I_DN相关联,我假设每个客户端证书(?)都是唯一的.我从这篇文章中得到了这个想法:http: //cweiske.de/tagebuch/ssl-client-certificates.htm
用户第一次访问内部网站时,他们将没有证书(我不想为客户手动生成证书!),在这种情况下$ _SERVER ["SSL_CLIENT_VERIFY"] =="NONE".如果发生这种情况,它将转到用户帐户设置页面,其中包括PHP生成SSL客户端证书并将其发送到浏览器以供用户安装的步骤.很好,很简单.然后,用户安装证书,建立关联,并在重新启动浏览器后(为了更好地衡量),用户返回内部网站.
此时,Apache应该请求客户端证书,然后浏览器发送该证书.PHP脚本然后解析必要的$ _SERVER变量,与MySQL数据库进行比较,并且所有人都有好的时间.再次,好又简单.
什么工作到目前为止
我安装了服务器端证书.是的,他们是自签名的(出于显而易见的原因).Apache安装了mod_ssl,所有这些似乎都运行正常.我创建了一个只转储$ _SERVER数组的PHP脚本,所有SSL_SERVER_*键值都与我为它创建的证书相匹配.
问题
我无法获得客户端证书!在同一个PHP脚本中,无论我做什么,都缺少SSL_CLIENT_VERIFY =="NONE"和其他SSL_CLIENT_*键.如果我在ssl.conf中将SSLVerifyClient设置为可选,则会发生这种情况.根据我读过的每个教程,他们都说网络服务器应该向浏览器询问客户端证书.事情是,我无法做到这一点!它只是直接进入PHP脚本,并假设我根本没有客户端证书.这种情况发生在Firefox,Chrome和IE中.
所以我尝试将SSLVerifyClient设置为必需并重新启动Web服务器.有了这个选项,我甚至无法建立SSL连接.Firefox只是说连接已经重置(其他浏览器也会显示自己的错误版本).奇怪的是,日志在这些连接尝试中没有显示任何活动!即access_log,error_log,ssl_access_log,ssl_error_log和ssl_request_log都不显示任何内容 ; 就好像这次尝试从未发生过一样.这令人沮丧,因为这意味着我甚至没有可以使用的错误消息.只是一个网络服务器被动 - 积极地告诉我下地狱.
我尝试使用PHP的OpenSSL扩展手动生成/安装我自己的客户端证书.证书安装得很好,虽然我找不到任何关于如何将该证书与服务器关联的信息(假设我甚至需要?).此外,它似乎无关紧要,因为如果设置了可选项,Apache仍然不会请求客户端证书.如果设置了需求,它只是在没有解释的情况下爆炸.无论如何,我需要将它设置为可选,以使此模式起作用.
环境
操作系统:CentOS 5.7 64位(VirtualBox)
Apache:2.2.3
PHP:5.3.10
我猜你可能需要更多的信息来帮助我,所以请问!我会为你提供你需要的一切.
总而言之,我需要知道如何在给定上述条件的情况下让Apache请求SSL客户端证书.此外,如果有任何特殊的签名/等必须要使客户端证书与服务器证书"兼容"(再次,没有通过shell为每个客户端证书手动执行!),我将需要知道好.
到目前为止,我100%坚持这一点.在Google上找不到任何远程帮助.您可以提供的任何帮助将是非常感谢!! 谢谢!=)
我正在做的事情:
在我们公司的Intranet上创建一个主页,该主页自动抓取查看该页面的人的登录Windows用户名,而不会在页面加载时提示用户输入这些凭据.
目前,我只是想让它获取本地用户名,因为在我们的IT人员获得域名设置之前还需要一段时间.例如,现在我希望它在没有任何提示的情况下捕获"(PC-Name)\ windows.user.name".
环境:
Windows 7 x64上的Apache 2.2.21(一旦投入生产,将在CentOS上).
PHP 5.3.8(VC9-ZTS).
Internet Explorer 9.0.8x和Firefox 6.0.2(稍后会担心Chrome).
当前的测试页面只是一个调用print_r($ _SERVER)的PHP脚本.
为了简单起见,我正在测试它的目录不是VirtualHost.
到目前为止我采取的步骤:
从SourceForge下载mod_sspi_1.0.4-2.2.2并将mod_auth_sspi.so解压缩到Apache模块目录.
添加了模块声明:
LoadModule sspi_auth_module modules/mod_auth_sspi.so
添加了目录定义:
AllowOverride无选项无订单允许,拒绝全部允许
AuthName "My Intranet"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative Off
require valid-user
Run Code Online (Sandbox Code Playgroud)
在Firefox中启用集成身份验证,转到about:config并将network.automatic-ntlm-auth.trusted-uris设置为PHP脚本的绝对URL路径,然后重新启动Firefox.
我还没有在IE中完成相同的步骤,但我会让Firefox工作,因为这是我们内部支持的主要浏览器.
重新启动Apache并尝试加载测试PHP脚本.
结果:
到目前为止的疑难
我尝试过循环使用各种SSPI选项,例如authritative on/off和诸如此类的东西.没有效果.
如果我删除"require valid-user",则不再出现提示,但是也没有传递用户名(它不是NULL;根本不在数组周期中设置).
如果我在提示符下点击"取消",我会得到标准的"需要身份验证"页面.
如果我输入的用户名无效,或者用户名正确但密码错误,则会加载该页面,但用户名将为"(PC-Name)\ Guest".
如果我输入正确的用户名/密码,则显示用户名而不是Guest.
一旦我在IE或Firefox中输入用户名/密码,浏览器会记住后续页面上的用户名,直到我清除存储的密码缓存或重新启动浏览器.
我花了大约3个小时谷歌搜索和随机猜测.零成功.我发现了一些人们提出这个问题的孤立的论坛帖子,但要么他们没有得到答复,要么提供我已经尝试过但没有成功的解决方案.
同样,我想要的是加载页面,没有任何提示,并在$ _SERVER数组输出中显示当前登录的Windows用户名.
据我所知,这可能是:Windows配置问题,Apache配置问题或浏览器配置问题.除此之外,我是新鲜的想法.
我将非常感谢您提供的任何帮助.谢谢!
--Kris
好的,这是自从我将 RestSharp 更新到当前版本后出现问题的 C# 代码:
restRequest.Files.Add((FileParameter)file); // Added cast for clarity
Run Code Online (Sandbox Code Playgroud)
根据当前的官方文档,这是正确的选择:
restRequest.AddFile((FileParameter)file);
Run Code Online (Sandbox Code Playgroud)
然而,这似乎是不正确的,因为它抛出了这个异常:
方法“AddFile”没有重载需要 1 个参数
这直接与 RestSharp 文档相矛盾。我一直无法找到任何方法来解决这个问题。我尝试了那里的重载,但 FileParameter 不再包含所需的 Writer 属性,并且我找不到任何提及该属性移动到何处的文档。
我缺少什么?
这是有问题的相关代码:
XAML:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="ContentPage_MainPage"
x:Class="OpenBacon.MainPage">
<ContentPage.ToolbarItems>
<ToolbarItem x:Name="ToolbarItem_Subreddits" Order="Primary" Priority="10" Text="Initializing...." Clicked="ToolbarItemSubreddits_Clicked" />
<ToolbarItem x:Name="ToolbarItem_Spacer" Order="Primary" Priority="20" Text=" " />
<ToolbarItem Order="Primary" Priority="30" Clicked="ToolbarItemSearch_Clicked">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource" Android="OpenBaconSearch" />
</ToolbarItem.Icon>
</ToolbarItem>
<ToolbarItem x:Name="ToolbarItem_Mail" Order="Primary" Priority="40" Clicked="ToolbarItemMail_Clicked">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource" Android="OpenBaconMail" />
</ToolbarItem.Icon>
</ToolbarItem>
<ToolbarItem Order="Primary" Priority="50" Clicked="ToolbarItemBaconButton_Clicked">
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource" Android="OpenBaconBaconButton" />
</ToolbarItem.Icon>
</ToolbarItem>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<AbsoluteLayout Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<ScrollView x:FieldModifier="public" x:Name="ScrollView_Main" Orientation="Vertical">
<StackLayout x:Name="StackLayout_Main">
<!-- Sort bar. -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" /> …Run Code Online (Sandbox Code Playgroud) 假设我们有一个字符串: "abcbcdcde"
我想使用正则表达式识别在该字符串中重复的所有子串(即没有暴力迭代循环).
对于上面的字符串,结果集将是: {"b","bc","c","cd","d"}
我必须承认,对于有经验的人来说,我的正则表达式应该比它应该更加生疏.我尝试使用反向引用,但这只会匹配连续的重复项.我需要匹配所有重复项,连续或其他.
换句话说,我想匹配> =第二次出现的任何字符.如果子串出现5次,那么我想捕获每个出现2-5.合理?
到目前为止,这是我可悲的尝试:
preg_match_all( '/(.+)(.*)\1+/', $string, $matches ); // Way off!
Run Code Online (Sandbox Code Playgroud)
我试着玩前瞻,但我只是在屠杀它.我在PHP(PCRE)中这样做,但问题或多或少与语言无关.我发现自己对此感到困惑,这有点令人尴尬.