使用具有ASP.NET成员身份的Active Directory LDAPS身份验证时出现问题



我使用的是asp.net框架4.8我正在尝试将成员资格类与Active directory提供程序一起使用。安全团队坚持使用带有ca证书的LDAPS协议,所以我这样设置配置:

web.config

<connectionStrings>
<add name="ADService" connectionString="LDAPS://ipaddress:636/OU=ou,DC=dc,DC=dc"/> (censored)
</connectionStrings>
<system.web>
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider"
connectionStringName="ADService"
connectionUsername="MYUSERNAME"
connectionPassword="MYPASSWORD "
connectionProtection="Secure"/>
</providers>
</membership>
</system.web>

当我尝试使用Membership.GetUser((时,我会得到以下异常:

{"错误HRESULT E_FAIL已从对COM的调用中返回组成部分(C:\Projects\\project\web.config第83行("}

我厌倦了执行中的步骤:调试时调用COM组件VS2012返回错误HRESULT E_FAIL

我可以使用LDAP浏览器连接到活动目录,但不能通过我的代码。

当我尝试连接到本地域上的另一个不安全的活动目录(端口389上的LDAP(时,它确实可以工作。

有什么建议吗?

基于SSL的LDAP遵循与基于SSL的HTTP(HTTPS(相同的规则。两个最重要的部分是:

  1. 用于连接的域名必须与证书上的某个域名匹配
  2. SSL证书必须由您的计算机信任的实体颁发,并且

规则#1意味着你不能使用IP地址进行连接,而你似乎正在尝试这样做。你必须使用域名。这可能是你唯一的问题。

对于规则#2,您可以通过使用以下PowerShell脚本将证书下载到计算机来检查证书:

$webRequest = [Net.WebRequest]::Create("https://example.com:636")
try { $webRequest.GetResponse() } catch {}
$cert = $webRequest.ServicePoint.Certificate
$bytes = $cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Cert)
set-content -value $bytes -encoding byte -path "certificate.cer"

example.com更改为您的域名(您实际上可以在此处使用IP地址,因为它只是下载证书,而不是评估它是否可信(。运行后,您将拥有一个certificate.cer文件,您可以双击该文件并进行检查。它会明显地告诉您证书是否不可信。如果是这种情况,则必须将根证书作为受信任的根证书安装在计算机上。

为了帮助使用规则#1,您还可以查看证书中列出的所有域,方法是查看"详细信息"选项卡和";受试者备选名称";在列表中。可能只有一个,但可能还有更多。如果有多个,只需确保您在该DNS上使用解析到正确的IP地址。

相关内容

最新更新