You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SSL身份认证?解决套接字权限禁止访问错误

问题解决:Socket权限禁止访问错误

你遇到的"An attempt was made to access a socket in a way forbidden by its access permissions"错误,主要和端口绑定权限、证书权限或端口占用有关,以下是具体解决步骤:

1. 检查端口是否被占用

打开命令提示符,执行以下命令查看44300端口是否被其他进程占用:

netstat -ano | findstr :44300

如果返回结果中有进程ID(PID),打开任务管理器结束对应进程,或者修改代码中的端口号为未被占用的数值。

2. 以管理员权限运行程序

Windows系统中,绑定网络端口可能需要管理员权限:

  • 右键点击你的Web应用程序或调试工具(如Visual Studio),选择以管理员身份运行,再重新执行代码。

3. 配置证书私钥访问权限

你的代码中使用的证书必须包含私钥,且运行Web应用的账户需要有读取私钥的权限:

  1. 按下Win+R输入certmgr.msc打开证书管理器;
  2. 找到你的MyServer.cer证书(通常在「个人」→「证书」目录下);
  3. 右键证书→「所有任务」→「管理私钥」;
  4. 添加运行应用的账户(如IIS应用池账户、当前登录用户),并赋予读取权限。

4. 预留端口权限(可选)

如果需要长期固定使用44300端口,可通过命令为指定用户预留端口权限:

netsh http add urlacl url=http://+:44300/ user=你的账户名

替换「你的账户名」为实际运行应用的账户(如DESKTOP-XXXXXX\张三)。

附你提供的代码:

X509Certificate2 CER = new X509Certificate2(Server.MapPath("MyServer.cer"), "password");// Has to be a private X509cert with key
TcpListener listener = new TcpListener(IPAddress.Any, 44300);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("client accepted");

try
{
    SslStream stream = new SslStream(client.GetStream());
    stream.AuthenticateAsServer(CER, false, SslProtocols.Tls12, false);
    Console.WriteLine("server authenticated");
    stream.Close();
    Console.Read();
}
catch (AuthenticationException err)
{
    Console.WriteLine("Exception: {0}", err.Message);
    Console.WriteLine("Authentication failed - closing the connection.");
    return;
}

内容的提问来源于stack exchange,提问作者Tavakkoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:07:11