Tag: ssl

如何每次重新关联SSL连接=不同的ssl-SessionID(windows,c#)

我怎么能在C#/ Windows7中做,我的应用程序不重用现有的SSL连接。 实际上,当我使用HttpWebRequest向https页面发出get请求时,如果存在连接,则它使用此连接(=相同的ssl-sessionid)。 我做了一些测试,Windows 7在2分钟后重新连接了ssl连接。 但我会永远不会重复使用现有的连接。 我已经尝试了很多想法:keep-alive,ClientCacheTime(regedit),ServicePointManager.SetTcpKeepAlive … 非常感谢 ! ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; ServicePointManager.DnsRefreshTimeout = 200; /* ServicePointManager.SetTcpKeepAlive(false,0,0); ServicePointManager.DefaultConnectionLimit = 100; ServicePointManager.MaxServicePointIdleTime = 1;*/ // ServicePointManager.DefaultConnectionLimit = 1; uri = “https://server.com/test.jsp”; HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri); request.UserAgent = “Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)”; request.CookieContainer = cookieJar; request.ContentType = “text/xml”;// content […]

基于证书的身份validation的基础

我搜索了很多,并找到了很多关于如何在wcf中实现基于证书的身份validation的答案。 但我的问题与其基本原理有关。 在生产中实施基于证书的身份validation时,客户端是否提供了服务器需要在其受信任的人员存储中添加的证书? 或者服务器提供证书(由服务器签名)。 我想在配置wcf服务器时,我们只需配置证书位置和存储。 我们永远不会将它与任何域绑定。 因此,出示此证书的任何客户都可以访问我的服务。 如果证书需要绑定到域。 他们为什么不能只允许来自该域的所有请求。 当客户端调用wcf服务时,它会显示其证书。 该证书是否只带有公钥? 并且这个证书可以被窃取(因为它在网络上传播)并被黑客用来使用Web服务。 我知道ssl如何炒作。 在ssl的情况下,浏览器负责所有这些东西但是在wcf服务的情况下(当我们只想允许特定客户端访问我们的服务时)如何管理它。 提前致谢。 让我简单一点: 我想创建一个Web服务,我希望三个客户端(A,B和C)可以使用它。 我想通过证书validation这三个客户端。 在设置时,这些客户是否需要将证书发送给我。 或者我必须为他们创建证书? 客户端是否也会共享他们的私钥(在设置时) 我是否需要将这些证书放入受信任的人员商店? 当他们请求Web服务时,他们将出示他们的证书(仅限公钥)。 如果他们只使用公钥呈现,黑客可以窃取此公钥并请求我的网络服务。 我的web服务如何区分黑客/实际客户端。

Xamarin.Forms HTTPS和自签名证书问题

我正在使用Xamarin.Forms,我的优先级是UWP。 我试图通过System.Net.Http.HttpClient发布一个post请求,我的代码看起来像这样 public async Task Login(User user) { HttpClient client = await GetClient(); var response = await client.PostAsync(Url, new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, “application/json”)); var mobileResult = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject(mobileResult); return result; } 当我提出请求时,我收到此错误 System.Net.Http.HttpRequestException:发送请求时发生错误。 —> System.Runtime.InteropServices.COMException:找不到与此错误代码关联的文本。 证书颁发机构无效或不正确 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Net.Http.HttpHandlerToFilter.d__4.MoveNext()—堆栈跟踪结束抛出exception的前一个位置— System.Runtime.Compiler服务上的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务),System.Net.Http.HttpClientHandler.d__86.MoveNext的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) )—内部exception堆栈跟踪的结束—在System.Net.Http.HttpClientHandler.d__86.MoveNext()—从抛出exception的先前位置的堆栈跟踪结束—在System.Runtime.CompilerServices System.Net.Http.HttpClient.d__58.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的.TaskAwaiter.ThrowForNonSuccess(任务任务)—来自先前位置的堆栈跟踪结束 rown —位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务), 1.GetResult() at SampleApp.Services.LoginService.d__2.MoveNext() — End of stack trace from previous […]

使用WebSockets的自托管WCF无法使用SSL

我在控制台应用程序中有此代码。 我试图从开发工具chrome连接,但得到此错误,虽然问题肯定在WCF方面: WebSocket connection to ‘wss://127.0.0.1:5650/Echo’ failed: Error in connection establishment: net::ERR_CONNECTION_RESET WSS没有达到我的服务器代码,没有例外,甚至没有日志。 最小修改的WS工作正常。 我使用nuget的Microsoft.WebSockets来简化代码: WebSocketHost server = new WebSocketHost(typeof(EchoWSService), new Uri(“https://127.0.0.1:5650/Echo”)); var bindingSsl = WebSocketHost.CreateWebSocketBinding(true); server.AddWebSocketEndpoint(bindingSsl); server.Open(); 我已经尝试过自定义证书validation器,但正如我所说它没有达到我的代码。 现在我有一个相同的代码,除了使用ServiceRoute的ASP.net应用程序中的server.Open() ,它工作得很好! 是的SSL和VS为IIS Express生成的自签名证书: RouteTable.Routes.Add(new ServiceRoute(“Echo”, new TRWebSocketServiceFactory(), typeof(EchoWSService))); 浏览器方面只有: var ws = new WebSocket(‘wss://127.0.0.1:5650/Echo’) 在web.config我没有超过 那么为什么地狱不能在一个简单的控制台应用程序中运行我自己托管的WCF呢?

即使ServerCertificateValidationCallback返回true,也“无法为具有权限的SSL / TLS建立安全通道”

我正在与使用带有证书身份validation的传输安全性设置WCF服务(WebHttpBinding)的供应商合作。 我为供应商提供了一个类似的服务,它正常工作,所以我有一个基本的想法,它应该如何工作。 在Windows 7上运行,当我在自己的帐户下使用服务时,一切正常,我得到了回复。 当我在测试帐户下使用它时,我在mscorlib中得到一个例外,它“无法为具有权限XXXX的SSL / TLS建立安全通道”。 如果我将测试帐户添加到内置管理员组,它可以正常工作。 服务器的证书是自签名的,主题字段设置为CN = XXXX,我在个人存储中具有服务器证书,在受信任的根证书颁发机构存储中具有CA证书。 此外,如果我尝试设置System.Net.ServicePointManager.ServerCertificateValidationCallback来打印诊断并返回true,我会得到一些有趣的行为。 在我的帐户下运行,回调被调用两次,然后WCF调用成功。 在测试帐户下运行,它被调用一次,返回,然后我得到上面的例外。 我最好的猜测是,这与测试帐户缺少的某些特权有关,但我不明白Windows如何处理证书以确定无疑,而且我不知道从哪里开始查找。

C# – 使用Websphere MQ V7.0.1的SSL

使用C#连接到启用SSL的队列管理器时,我需要设置哪些值才能使队列正常工作? 我目前收到此错误:原因代码:2393 MQRC_SSL_INITIALIZATION_ERROR 在我的代码中,我正在设置MQEnvironment.SSLKeyRepository和MQEnvironment.SSLCipherSpec 我还需要用C#设置其他东西吗? 我已经看到一些Java示例设置密钥库密码和类型和东西。 我也看过设置系统环境变量的例子,但这似乎也没有任何区别。

C#:如何在启用SSL的情况下连接到Active Directory?

我正在处理的项目将与客户A​​ctive Directory集成,以便对用户进行身份validation。 我一直在尝试编写一些可以检索用户密码的代码,我知道Active Directory只会通过端口636上的SSL连接公开相关属性。 以下代码以编程方式连接而不使用SSL,但后来我看不到密码属性: static void Main(string[] args) { DirectoryEntry entry = new DirectoryEntry(@”LDAP:///CN=LDAP Test,CN=Users,DC=customer,DC=com”); entry.AuthenticationType = AuthenticationTypes.None; entry.Username = “CN=LDAP Test,CN=Users,DC=customer,DC=com”; entry.Password = “”; if (entry != null) { foreach (Object propName in entry.Properties.PropertyNames) { Console.WriteLine((String)propName); } } } 当我更改代码以使用SSL时,我得到一个exception说明;未知错误(0x80005000)’。 我在托管Active Directory的服务器上启用了SSL,在同一台服务器上安装了Microsoft CA并从CA获得了证书。 我可以使用Apache Directory Studio通过SSL连接到Active Directory,但不显示密码属性。 以下代码显示了我一直尝试使用SSL进行连接的内容: static void Main(string[] args) { […]

使用RSA AES提供程序生成自签名1024位X509Certificate2时出现问题

我正在尝试使用Microsoft AES加密提供程序生成X509Certificate2对象: CALG_AES_256(0x00006610)256位AES。 Microsoft AES加密提供程序支持此算法。 我的问题是我对CryptGenKey(providerContext, 0x6610, 0x4000001, out cryptKey)失败,出现以下错误: mscorlib.dll中发生未处理的“System.Runtime.InteropServices.COMException”类型exception 附加信息:指定了无效标志。 (HRESULTexception:0x80090009) 我正在使用的标志是(1024 << 16) | 1) (1024 << 16) | 1) 。 除非我弄错了, 根据MSDN上的文档 ,这不应该产生1024位可导出密钥吗? 我的方法有什么问题? 我的代码如下: using System; using System.Security; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Security.Cryptography.X509Certificates; namespace WebSockets { public struct SystemTime { public short Year; public short Month; public short DayOfWeek; […]

使用特定CA进行SSL连接

我正在阅读使用.NET Framework 2.0的应用程序中的支持证书,试图确定如何为SSL连接设置CA. 在validation证书下的文章中,MSDN提供了一些代码: static void ValidateCert(X509Certificate2 cert) { X509Chain chain = new X509Chain(); // check entire chain for revocation chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; // check online and offline revocation lists chain.ChainPolicy.RevocationMode = X509RevocationMode.Online | X509RevocationMode.Offline; // timeout for online revocation list chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 30); // no exceptions, check all properties chain.ChainPolicy.VerificationFlags = […]

在C#中导入证书时,`PersistKeySet`-StorageFlag的影响是什么

在我的应用程序中,使用以下代码以编程方式将客户端身份validation证书添加到MY -Store: //certData is a byte[] //password is a SecureString X509Certificate2 certificate = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable); X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); try { store.Open(OpenFlags.ReadWrite); store.Add(certificate); } finally { store.Close(); } 使用此代码,证书已在我测试的所有计算机上正确导入MY -Store(指纹和认证链也正确)。 但是在某些计算机(Windows 7 Professional SP1和带有本地用户帐户的Widnows Server 2008 R2)上,证书之后可能不会用于客户端身份validation( “无法为SSL / TLS安全通道建立信任关系” )。 在具有域用户帐户的Windows 8.1 Enterprise计算机上,身份validation有时会起作用,但并非总是如此。 我绝望地尝试了几件事,最后找到了将X509KeyStorageFlags.PersistKeySet添加到存储标志的解决方案。 所以第一行现在是: X509Certificate2 certificate = new X509Certificate2(certData, […]