安全错误,在 Azure(Asp.net 核心)上使用客户端证书(自签名根)发布



>我已将客户端证书上传到 Azure,并正在尝试使用此证书向 api 方法发布。我的代码在本地计算机上调试时有效,但在 Azure 上作为应用服务运行时失败。

System.Net.Http.HttpRequestException:发送请求时出错。 ---> System.Net.Http.WinHttpException:发生安全错误 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.WinHttpHandler.<StartRequest>d__105.MoveNext() --- End of inner exception stack trace --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.HttpClient.d__58.MoveNext() --- 从引发异常的先前位置的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Bandytabeller.Controllers.swishController.d__3.MoveNext() in D:\ASP-hemsidor\NetCoreApplications\Bandytabeller\Bandytabeller\Api\swishController.cs:line 102

[HttpGet("{id}")] 公共异步任务支付(字符串 ID = ",字符串金额 = ") { 获取用户代理 字符串 userAgent = Request.Headers["User-Agent"]。ToString(); 创建付款请求 SwishPaymentRequest post = new SwishPaymentRequest(); post.payeePaymentReference = id.ToString(); post.callbackUrl = "https://www.quiz-walk.se/"; post.payeeAlias = "1231181189"; 发布金额 = 金额; post.currency = "SEK"; post.message = "Faktura " + id.ToString(); 创建 http 内容 HttpContent data = new StringContent(JsonConvert.SerializeObject(post), Encoding.UTF8, "application/json"); 创建变量 X509Store certStore = null; HttpClientHandler handler = null; HttpClient client = null; 字符串标记 = "; 尝试 { 创建请求处理程序 handler = new HttpClientHandler(); 处理器。客户端证书选项 = 客户端证书选项.手动; 处理器。SslProtocols = SslProtocols.Tls12 |SSL协议.tls11 |SslProtocols.Tls; 处理器。自动减压 = 解压方法。解压缩方法.GZip; 从证书存储中打开证书 certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); certStore.Open(OpenFlags.OpenExistingOnly |OpenFlags.ReadOnly); X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, "800CDE7BC219D53812FC164DFF0FE73DF8A8D7B6", false); if (certCollection.Count> 0) { 处理器。ClientCertificates.Add(certCollection[0]); } 禁用 SSL 验证 处理器。ServerCertificateCustomValidationCallback += (message, xcert, chain, errors) => true; 处理器。ClientCertificates.Add(cert); 创建 http 客户端 client = new HttpClient(handler, false); 发布付款请求 任务任务 = Task.Run(() => 客户端。PostAsync("https://mss.swicpc.bankgirot.se/swish-cpcapi/api/v1/paymentrequests/", data)); HttpResponseMessage task = await client。PostAsync("https://mss.swicpc.bankgirot.se/swish-cpcapi/api/v1/paymentrequests/", data); 等待任务完成 任务。等待(); 确保响应成功 如果(任务。StatusCode == System.Net.HttpStatusCode.Created) { 获取所有标头值 IEnumerable 标头 = 任务。Headers.GetValues("PaymentRequestToken"); 获取令牌 foreach (标头中的字符串值) { 令牌 += 值; } } } 捕获(例外,例如) { 令牌 += 例如ToString(); 记录。日志警告(例如ToString()); } 最后 { 释放处理程序和客户端 if(certStore != null) { certStore.Dispose(); } if (处理程序 != 空) { 处理器。处置(); } if (客户端 != 空) { 客户。处置(); } } 创建网址 字符串网址 = "http://www.bokforingstips.se"; if (userAgent.Contains("Windows Phone") == true) { url = "swish://paymentrequest?token=" + token; } else if (userAgent.Contains("iPhone") == true || userAgent.Contains("iPad") == true) { url = "swish://paymentrequest?token=" + token; } else if (userAgent.Contains("Android") == true) { url = "意图://付款请求?令牌=" + 令牌 + "/#Intent;方案=嗖;package=se.bankgirot.swish;结束;"; } 还 { 返回内容(处理程序。客户端证书[0]。发行人 + " " + 令牌); } 将用户重定向到网址 返回重定向(网址); }//结束支付方式

我正在测试 Swish API,我使用 ServerCertificateCustomValidationCallback 进行验证。我在本地计算机上工作,但不在 Azure 上工作。证书已加载,错误发生在 PostAsync 调用上。

Asp.Net 核心 1.1.1

在 Azure 上使用 .Net Framework 4.6.2 进行测试。它不起作用,已启用 system.net 跟踪。

'System.Net 信息: 0 : [12712] 安全通道#3644764 - 证书的类型为 X509Certificate2,包含私钥。 System.Net 信息: 0 : [12712] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, tentent = Outbound, scc = System.Net.SecureCredential) System.Net 信息: 0 : [12712] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 6801dc65d0:db724b14d0, targetName = mss.swicpc.bankgirot.se, inFlags = ReplayDetect, SequenceDetect, Secretity, AllocateMemory, InitManualCredValidation) System.Net 信息: 0 : [12712] 初始化安全上下文(缓冲区内计数 = 2, 缓冲区外长度 = 1638, 返回的代码 = 继续需要). System.Net.Sockets Verbose: 0 : [12712] Socket#66404974::BeginSend() System.Net.Sockets 详细: 0 : [23872] 来自 Socket#66404974::P ostCompletion 的数据 System.Net.Sockets 详细: 0 : [23872] (打印 1638 中的 1024) System.Net.Sockets 详细: 0 : [12712] 退出套接字#66404974::BeginSend() -> OverlappedAsyncResult#29753716 System.Net.Sockets 详细: 0 : [23872] 00000000 : 16 03 03 06 2E 0B 00 04-9C 00 04 99 00 04 96 30 : ...............0 系统网插座详细: 0 : [23872] 00000010 : 82 04 92 30 82 02 7A A0-03 02 01 02 02 08 1B 46 : ...0..z..F System.Net.Sockets 详细: 0 : [23872] 00000020 : F2 54 AE 99 F3 1C 30 0D-06 09 2A 86 48 86 F7 0D : .T....0...*.H... System.Net.Sockets 详细: 0 : [23872] 00000030 : 01 01 0B 05 00 30 73 31-0B 30 09 06 03 55 04 06 : .....0秒1.0...U.. 系统网插座 详细: 0 : [23872] 00000040 : 13 02 53 45 31 1D 30 1B-06 03 55 04 0A 0C 14 54 : ..SE1.0...U....T System.Net.Sockets 详细: 0 : [23872] 00000050 : 65 73 74 62 61 6E 6B 20-32 20 41 42 20 28 70 75 : estbank 2 AB (pu System.Net.Sockets 详细: 0 : [23872] 00000060 : 62 6C 29 31 11 30 0F 06-03 55 04 05 13 08 54 45 : bl)1.0...U....泰 System.Net.Sockets 详细: 0 : [23872] 00000070 : 53 54 53 45 54 32 31 32-30 30 06 03 55 04 03 0C : STSET21200..U... System.Net.Sockets 详细: 0 : [23872] 00000080 : 29 54 65 73 74 62 61 6E-6B 20 32 20 43 75 73 74 : )测试库 2 客户 系统.Net.Sockets 详细: 0 : [23872] 00000090 : 6F 6D 65 72 20 43 41 31-20 76 31 20 66 6F 72 20 : omer CA1 v1 for System.Net.Sockets 详细: 0 : [23872] 000000A0 : 53 77 69 73 68 20 54 65-73 74 30 1E 17 0D 31 35 : Swish测试0...15 System.Net.Sockets 详细: 0 : [23872] 000000B0 : 31 30 32 36 32 33 30 30-30 30 5A 17 0D 31 37 31 : 1026230000Z..171 System.Net.Sockets 详细: 0 : [23872] 000000C0 : 30 32 36 32 31 35 39 35-39 5A 30 37 31 0B 30 09 : 026215959Z071.0. System.Net.Sockets 详细: 0 : [23872] 000000D0 : 06 03 55 04 06 13 02 53-45 31 13 30 11 06 03 55 : ..U....SE1.0...U System.Net.Sockets 详细: 0 : [23872] 000000E0 : 04 0A 0C 0A 35 35 36 39-31 33 37 33 38 32 31 13 : ....55691373821. System.Net.Sockets 详细: 0 : [23872] 000000F0 : 30 11 06 03 55 04 03 0C-0A 31 32 33 31 31 38 31 : 0...U....1231181 System.Net.Sockets 详细: 0 : [23872] 00000100 : 31 38 39 30 82 01 22 30-0D 06 09 2A 86 48 86 F7 : 1890.."0...*.H.. System.Net.Sockets 详细: 0 : [23872] 00000110 : 0D 01 01 01 05 00 03 82-01 0F 00 30 82 01 0A 02 : ...........0.... System.Net.Sockets 详细: 0 : [23872] 00000120 : 82 01 01 00 BC CF F1 F1-62 AB 84 50 EC 91 13 A9 : ........b..P.... 系统网插座 详细: 0 : [23872] 00000130 : 6B FE 20 78 32 01 54 E9-84 8F FD 4C 77 61 EB B5 : k. x2.T....哇.. System.Net.Sockets 详细: 0 : [23872] 00000140 : 1F 86 66 E8 C9 17 35 37-DB F3 7B 07 72 AA 80 D5 : ..f...57..{.r... System.Net.Sockets 详细: 0 : [23872] 00000150 : 79 C5 AB AD C7 92 E0 55-4C 03 3C ED D7 49 4E D6 : y...UL.Mj.0{N..... 系统.Net.Sockets 详细: 0 : [23872] 00000220 : 9E 39 36 3F 02 03 01 00-01 A3 66 30 64 30 12 06 : .96?......f0d0.. System.Net.Sockets 详细: 0 : [23872] 00000230 : 03 55 1D 20 04 0B 30 09-30 07 06 05 2A 03 04 05 : .U. ..0.0...*... System.Net.Sockets 详细: 0 : [23872] 00000240 : 01 30 0E 06 03 55 1D 0F-01 01 FF 04 04 03 02 07 : .0....... System.Net.Sockets 详细: 0 : [23872] 00000250 : 80 30 1D 06 03 55 1D 0E-04 16 04 14 60 78 11 F2 : .0...U......'x.. System.Net.Sockets 详细: 0 : [23872] 00000260 : 80 61 20 15 74 29 36 9E-F8 96 1E 7D 33 6C 7F F8 : .a .t)6....}3l.. System.Net.Sockets 详细: 0 : [23872] 00000270 : 30 1F 06 03 55 1D 23 04-18 30 16 80 14 26 CD F1 : 0...U.#..0...&.. System.Net.Sockets 详细: 0 : [23872] 00000280 : 34 AD 9D 0F 17 DC 90 6D-AE B2 BB DF BE A0 0C F5 : 4......m........ System.Net.Sockets 详细: 0 : [23872] 00000290 : 40 30 0D 06 09 2A 86 48-86 F7 0D 01 01 0B 05 00 : @0...*.H........ System.Net.Sockets 详细: 0 : [23872] 000002A0 : 03 82 02 01 00 16 18 A4-67 4E 78 3C B7 1F 91 F5 : ........gNx|.... System.Net.Sockets 详细: 0 : [23872] 000002D0 : F1 DD 3E DE 05 F1 7A FC-5A D1 E4 78 33 80 8C 84 : ..>...z.Z..x3...System.Net.Sockets 详细: 0 : [23872] 000002E0 : EF 68 FD 90 13 E7 77 35-B9 8E B4 3C 0F 2C DE 55 : .h....w5...嗯..V..F... System.Net.Sockets 详细: 0 : [23872] 00000370 : DE DB 8D63 2A 46 C2 3E-31 1E 01 DA B1 57 EE FD : ...c*F.>1....W.. System.Net.Sockets 详细: 0 : [23872] 00000380 : A6 0C A1 09 8F 03 41 2D-4D 77 19 A9 61 22 50 01 : ......A-Mw..a"P. System.Net.Sockets 详细: 0 : [23872] 00000390 : F9 72 46 A7 42 20 03 16-91 F4 37 00 78 73 5D 8E : .rF.B ....7.xs]。 System.Net.Sockets 详细: 0 : [23872] 000003A0 : 05 21 01 FB C7 5D D4 AD-39 41 F4 3C 07 BC 9C 03 : .!...]..9A.Int32#1638 System.Net.Sockets 详细: 0 : [23872] Socket#66404974::BeginReceive() System.Net.Sockets 详细: 0 : [12712] 来自套接字 #66404974::P ostCompletion的数据 System.Net.Sockets 详细: 0 : [12712] 00000000 : 15 03 03 00 02 : ..... System.Net.Sockets Verbose: 0 : [12712] Socket#66404974::EndReceive(OverlappedAsyncResult#64760428) System.Net.Sockets 详细: 0 : [12712] 退出套接字#66404974::EndReceive() -> int32#5 System.Net.Sockets 详细: 0 : [23872] 退出套接字#66404974::BeginReceive() -> OverlappedAsyncResult#64760428 System.Net.Sockets 详细: 0 : [23872] Socket#66404974::BeginReceive() System.Net.Sockets 详细: 0 : [12712] 来自套接字 #66404974::P ostCompletion的数据 系统.Net.套接字详细: 0 : [12712] 00000000 : 02 28 : .( System.Net.Sockets Verbose: 0 : [12712] Socket#66404974::EndReceive(OverlappedAsyncResult#27335310) System.Net.Sockets 详细: 0 : [12712] 退出套接字#66404974::EndReceive() -> int32#2 System.Net.Sockets 详细: 0 : [23872] 退出套接字#66404974::BeginReceive() -> OverlappedAsyncResult#27335310 System.Net 信息: 0 : [23872] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 6801dc65d0:db724b14d0, targetName = mss.swicpc.bankgirot.se, inFlags = ReplayDetect, SequenceDetect, Secretity, AllocateMemory, InitManualCredValidation) System.Net 信息: 0 : [23872] 初始化安全上下文(缓冲区内计数=2,缓冲区外长度=0,返回的代码=非法消息)。 System.Net.Sockets 详细: 0 : [23872] Socket#66404974::D ispose() System.Net 错误: 0 : [23872] HttpWebRequest#15120020 中的异常: - 请求已中止:无法创建 SSL/TLS 安全通道。 System.Net 详细: 0 : [23872] HttpWebRequest#15120020::EndGetRequestStream() System.Net 错误:0 : [23872] HttpWebRequest#15120020::EndGetRequestStream 中的异常 - 请求已中止:无法创建 SSL/TLS 安全通道。`

ServerCertificateCustomValidationCallback 永远不会被调用,我猜 Azure 不允许这个回调。根证书必须受信任。

最新更新