超级变态的问题:System.Net.WebException: 基础连接已经关闭: 服务器提交了协议冲突。

lgqt 2008-06-23 04:47:05
用ftpWebRequest做ftp上传,其中主要代码如下:
reqFTP.KeepAlive = false;
reqFTP.UsePassive = true;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.EnableSsl = true;
只有我吧ssl加上,就报错误“System.Net.WebException: 基础连接已经关闭: 服务器提交了协议冲突。”
怎么解决啊。服务器端用的FileZilla,证书也是用fileZilla生成的。
...全文
2634 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouhwu 2009-06-09
  • 打赏
  • 举报
回复
估计你的IE设置了代理!在代码中加入 限制访问时候使用代理
listRequest.Proxy = null;
lgqt 2008-06-24
  • 打赏
  • 举报
回复
ding
lgqt 2008-06-24
  • 打赏
  • 举报
回复
ding
lgqt 2008-06-23
  • 打赏
  • 举报
回复
奥,我用抓包工具看了。分三种情况:
1:在没有ssl的情况下,抓包工具能看到传的命令比如用户名,密码什么的。(客户端用的自己的代码)
2:在有ssl的情况下,客户端用FileZilla客户端,是能正常上传的,并且在抓包工具里能看到目标地址。
2:在有ssl的情况下,客户端用自己写的代码,是不能正常上传的,并且在抓包工具里能看不到任何目标地址。也就是说可能用自己的代码做ssl的时候,根本就没有向服务器端发过一个包啊。
为什么哟?,我的客户端用的是msn上的例子。有ssl和没ssl的区别主要就是request.EnableSsl = true?

哪位大哥能帮我呢。

fuadam 2008-06-23
  • 打赏
  • 举报
回复
你服务器上安装证书服务了吗,还有

//安全验证回调函数
private static bool RemoteCertificateCallback(Object sender, X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
MessageBox.Show(sslPolicyErrors.ToString());
return false;
}


这个试了吗,看看到底是什么证书错误。
还有你可以看下ie-》internet选项-》内容-》证书-》收信任的更证书颁发机构里面是不是多了一个你自己服务器的根证书
shuaizhen 2008-06-23
  • 打赏
  • 举报
回复
很厉害的一个问题关注一下。
fuadam 2008-06-23
  • 打赏
  • 举报
回复
你服务器上安装证书服务了吗,还有

//安全验证回调函数
private static bool RemoteCertificateCallback(Object sender, X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
MessageBox.Show(sslPolicyErrors.ToString());
return false;
}


这个是了吗,看看到底是什么证书错误
lgqt 2008-06-23
  • 打赏
  • 举报
回复
根证书??可是fileZilla:ftp服务器就能生成一个证书啊,那个证书里面用文本文件打开后有两部分内容如下:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDvxrV1gwIUJKniirvycr2+BHonFgRmrzcRd72xpmSGZ5qrhpC1
gGq4ZbfCbypNnjY4aWR2DQiW1B4sYdwvnGatWgaRGx4DuuPu+n26j5XW7QijF3Dg
QY+JYB4WpIDN2Z9tmNRf2kHy+mF6BD1axiJRVaxyiFVS5FtJQ+K7EtzgCQIDAQAB
AoGAf/BeOIKb5FWf1EJEgNxag/5tk1d7J7NMReTHcfgf4Vt8uxNFOaN4zkVwJK4e
O2Y09iq+MQNJVvl91B6vVzQz0Dk2i2+l1cLvVL9b1wsEkfN/GrQCocUGbbmpIXCu
cd/FivGUhBBIow7Fv5JvyMJCO67BpRcgSDqLSveAhAmKeIECQQD5ocqzUA+Gwzef
d2wwkOx1BWQDEkCn101/m2Xi8ZSMn0wwNx1q+K6bX7rmpEkqkpi9vpZu23E2pjYF
n3NTEyvZAkEA9eSN5wIapYw9G7mWvs6WtD2A7daEbaPNryIKeTdqGXWQp3eRRgdN
77XofcLNlS9hUplbdAvCi2m7vzMzLWmnsQJBAPDbI1mpmKF9P/DT6AZf/lXWUq4H
8Ww/9111EXRLhPm9RWSL+Q1aThZJ4mpg/ttdwJPrDPh/MJf6/MqmEz6Hk9kCQAsM
rze/R3VC/Qf+6gA/BlSpIt8NMbw/jSGelPvnepQUTWDJJbUQ5PatpPnpxBU9INF2
ZL6tPJvJL4+i/FzBD7ECQQC6X4ze1SZp6/eCYzCwV/mICo3k2hkeBH2m0rnLqG2q
EFyCD8ek/Vq647T8HmYLEBiSwgMgABvaBW947E75KsrI
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
MIICKjCCAZOgAwIBAgIBADANBgkqhkiG9w0BAQUFADBbMQowCAYDVQQDEwExMQsw
CQYDVQQGEwI4NjEKMAgGA1UECBMBMTEKMAgGA1UEBxMBMTEKMAgGA1UEChMBMTEK
MAgGA1UECxMBMTEQMA4GCSqGSIb3DQEJARYBMTAeFw0wODA2MjMwOTMyMjJaFw0w
OTA2MjMwOTMyMjJaMFsxCjAIBgNVBAMTATExCzAJBgNVBAYTAjg2MQowCAYDVQQI
EwExMQowCAYDVQQHEwExMQowCAYDVQQKEwExMQowCAYDVQQLEwExMRAwDgYJKoZI
hvcNAQkBFgExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvxrV1gwIUJKni
irvycr2+BHonFgRmrzcRd72xpmSGZ5qrhpC1gGq4ZbfCbypNnjY4aWR2DQiW1B4s
YdwvnGatWgaRGx4DuuPu+n26j5XW7QijF3DgQY+JYB4WpIDN2Z9tmNRf2kHy+mF6
BD1axiJRVaxyiFVS5FtJQ+K7EtzgCQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABlz
XaudNj3cqrsItG6EW/XKNRa+vvr8ADAGnJjDFHlgiHQT138Y/qi3d6Pr6+ZTs0FT
bGwAqCznG2fIsphFwOa+oWDhWK1X1p35LRns6xYyvP6afHV/RJidk+dDW8ecC/lg
66xVC99Vs/ZtHN2nv63quYavlYfJdh10zq9adw6d
-----END CERTIFICATE-----

我就把带红色的那部分PRIVATE KEY删除了然后再客户端装了。就这样的。好像我没看到服务器那里能生成根证书。
fuadam 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lgqt 的回复:]
ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateCallback;

request.Credentials = new NetworkCredential(aUser, aPsw);
request.Proxy = null;
request.KeepAlive = false;
request.UsePassive = true ;
request.EnableSsl = true;

我也用了啊,还是不行。我都不知道是怎么回事了。加入我不用ssl是肯定能传的。
我也把服务器上发的证书在客户端安装了的。哎,怎么回事哦。?哪…
[/Quote]
朋友你没有仔细看我的回复啊,将服务器颁发机构的根证书在客户端安装下,放到可信任的根证书颁发中心。
不是颁发的证书而是根证书
lgqt 2008-06-23
  • 打赏
  • 举报
回复
ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateCallback;

request.Credentials = new NetworkCredential(aUser, aPsw);
request.Proxy = null;
request.KeepAlive = false;
request.UsePassive = true ;
request.EnableSsl = true;

我也用了啊,还是不行。我都不知道是怎么回事了。加入我不用ssl是肯定能传的。
我也把服务器上发的证书在客户端安装了的。哎,怎么回事哦。?哪位大哥能帮我呢。
lgqt 2008-06-23
  • 打赏
  • 举报
回复
在配置文件中加入这个<httpWebRequest useUnsafeHeaderParsing="true" /> 早都试过了没用
fuadam 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunheartlee 的回复:]
在配置文件中加入
<configuration>
...
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
</configuration>

参考http://forums.msdn.microsoft.com/en-US/netfxnetcom/thread/ff098248-551c-4da9-8ba5-358a9f8ccc57/
[/Quote]

朋友你用抓包工具看过吗,ssl还有作用吗?
fuadam 2008-06-23
  • 打赏
  • 举报
回复
我用webservice做ssl的时候也遇到过这个问题,你可以参考下我的解决方法

将服务器颁发机构的根证书在客户端安装下,放到可信任的根证书颁发中心。

然后你添加个安全后掉函数就可以看到ssl通信成功了

using System.Net;
using System.Net.Security;
//安全验证回调函数
private static bool RemoteCertificateCallback(Object sender, X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
MessageBox.Show(sslPolicyErrors.ToString());
return false;
}
//添加回调函数
ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateCallback;

我觉得webservice里使用了System.Net.Security;命名空间应该对你这个程序有效
心晴Sunheart 2008-06-23
  • 打赏
  • 举报
回复
在配置文件中加入
<configuration>
...
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
</configuration>

参考http://forums.msdn.microsoft.com/en-US/netfxnetcom/thread/ff098248-551c-4da9-8ba5-358a9f8ccc57/


110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧