The request was aborted: Could not create SSL/TLS secure channel
https://stackoverflow.com/questions/2859790
Full question
- c# - asp.net - windows-7 - httpwebrequest - windows-8 |
- |
вопрос
We are unable to connect to an HTTPS server using WebRequest
because of this error message:
The request was aborted: Could not create SSL/TLS secure channel.
We know that the server doesn't have a valid HTTPS certificate with the path used, but to bypass this issue, we use the following code that we've taken from another StackOverflow post:
private void Somewhere() {
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}
private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
return true;
}
The problem is that server never validates the certificate and fails with the above error. Does anyone have any idea of what should I do?
I should mention that a colleague and I performed tests a few weeks ago and it was working fine with something similar to what I wrote above. The only "major difference" we've found is that I'm using Windows 7 and he was using Windows XP. Does that change something?
Решение
// using System.Net;
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// Use SecurityProtocolType.Ssl3 if needed for compatibility reasons
> ? ??????, ??? ????????? ????????.
>
??????> ??????????
> ??? ???? ????????? ??????? ???????????; ???? ?? ????????? ??? ???????? ??? ????????? ??????? PayPal, ??????????, ???????? ????????, ??? ??? ?? ????? ???????????? SSL3 ??????? ?? 3 ??????? 2018. ?? ?????? ?????? ???????????? TLS. ??? Paypal ???????? ?? ????.ДРУГИЕ СОВЕТЫ
> ??????? ???? ????????, ? .NET 4.5 ?>
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
> ???? ? ??? ??? .NET 4.5, ?? ???????????
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
> ?????????, ??? ????????? ServicePointManager ??????? ?? ????, ??? HttpWebRequest ??????, ????? ?? ?? ????? ????????.
> ??????: ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com/api/")
> ?? ???????:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com/api/")
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
> ???????? ? ??? ???? ??, ??? ???????????? ???? ???, ?? ????? ??????? ? ???????????. ?? ?????? ???????????? ?????? ? ??????? winhttpcertcfg.exe
> ?????? ????, ??? ????????? ??? ????????? ?? ??????: http://support.microsoft.com/kb/901183 > ??? ????? 2 ? ?????????????? ?????????? ?> > EDIT: ? ????? ??????? ??????? IIS, ??? ??????? ???????? ? ????????? ???????????? ?????????? - ? ????? ????????, ??????? ?????? ??????? ???? ?? ??????????? ? ? ??????? ????? ??? ?????????? ???????? ??????. ????????? ?????:> ?????? ???????? ????? ? ???? ????? ??????, ?????? ?????????? SSL / TLS ????? ????????? ????. ???????? ???????????????? ???????? ???????????????? ??? ? ???????? ?????? ???????? ??????????? ???????, ? ?? ???????????? ? ???, ???, ???????????? ???? ??????????? ?????????? ??????? ???????? ????, ?? ??? ?? ??????????? ???????????? ???????. ?????? ????? ????????? ???????? ??????????????, ?? ????? ???? ??????????????? ? ??????? ??????, ?? ?????????????? ????? ????????, ?? ????? ????? ????? ?????? ??????? ??????? ??? ???????????, ????? ???????? ?????? ? ?????? ?????? ??????. ?> > ?????? ??????? ??????????? ? ????????????? SCHANNEL ??????????? ?????????? ????????? ??????. SChannel ???????? ??????????? ???? ???????? ?? SSL ? TLS ? ??? ?????? ????? ???????????? ??? ??? ???????????. ?????????? ?? TLS / SSL ??????????? ? ????????? ? >. ?> > ????? ???????? ??? ???????? Schannel ??????? ??????? ??????? .
> ? ???? ??? ????????, ??????? ??????? https://ct.mob0.com/Styles/Fun.png, ??????? ???????????? ????? ??????????? ???????????????? CloudFlare ?? ??? CDN, ??? ???????????? ??????????? ????, ??? SPDY ? ???????? ???????? SSL-???????????.
> ?????? ???????? SSL3 ??? ? Simons ????? ? ??? ? ????????? ????????? ???, ??????? ???? Tls12 ????????? ???????:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
new WebClient().DownloadData("https://ct.mob0.com/Styles/Fun.png");
> ????? ?????? ????? ? ???? ?? ???????? ? ?????????, ??? ??????? ?????? ASP.NET ?????? ???????, ?????????? ??? ??????????? ?? ???? ?????? ? ???????????. ? ????????? ???, ??????? ? ??? ?????????? IIS, ??? ???????? ???-?????????? ??? ??????, ????? ? Advanced Settings, ? ????????? ???????????? ? LocalSystem
????? ?? NetworkService
.
NetworkService
?? ????????? ??????? ??????, ?? ??? ???????? ??? ???????? ??????????????? ????????????.
> ???-?? ???????????? ????? ?? ????. ? ??????? ??? ??????? ????, ????? ??????? ??? ?????????????????.
ServicePointManager.Expect100Continue = true;
ServicePointManager.DefaultConnectionLimit = 9999;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
> ?????? ???????????? ???????? ???????????? ????????????? ?????? ?? ???????. ????????? ? ???, ????? ??????? ?????????? ??????. ??????? ? ????? ?? ?????, ??? ??? ??? ??? ???? ????-???? ??? ??????? ?? ??????????, ??? ????????? ???? ?? ??????.
> «?????? ??? ???????: ?? ??????? ??????? SSL / TLS ?????????? ?????» ?????????? ????? ?????????, ???? ?????? ?????????? ??????? ??????> HTTP 401 ??????????????????? ????? ?? ?????? HTTP
. > ?? ?????? ??????????, ???? ??? ?????????? ????? ????????? ????????????? System.Net ??????????? ?????? ??? ?????? ??????????? ??????????, ??? ??????? ? ??????? ???? ????? . ?> > ????? ????, ??? ???????????? ??????????? ?? ?????, ????????? ?????????? ? ????????????? ??????, ? ????? ?????????? ? ???? ?? ?????, ??? ???:System.Net Information: 0 : [9840] Connection#62912200 - Received status line: Version=1.1, StatusCode=401, StatusDescription=Unauthorized.
> ? ???? ????????, ? ??? ?? ? ????????? ?????????? ???????????? ????, ??? ?????? ???????, ??? ????? ? ??????? ?????? ?? ?????? ? ??????? 401, ???????, ? ???? ???????, ??????? ? «?? ??????? ??????? SSL / TLS ??????????? ??????» ??????????. ?>
> ?????? ????? ?????????? ? ???? ?????? ???? ??, ??? ? ?????-?? ?????? ? ???? ????????? ???? ????????:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
> ??? ????????????? ?????. ??? ?? ?????? ?????????? .NET ???????????? ???????????? ????????, ?? ??? ?????? ?? ?????? ????? WebClient (? ???????????) ??????? ????? ? ????? AppDomain. (???????? ????????, ??? ???????? ???-??????? ?? ????????????? ? ?????????? ASP.NET, ?? ? ????? ??????? WebClient, ????????, ??? ????????? ? ??????? ???-??????, ????????).
> ? ???? ??????, ??? ???? ?? ????? ???? ?? ?????, ??? ??? ? ??? ?? ?????? ??????? ????????? ? ??? ??? ?????? ???-??????? ????? ?????? ???????? ?????????. ??????????? ?? ???? ?????? ? ?????? ?????, ? ????? ???-???:
- ??? ?????????? ????????? ? ????? AppDomain, ? ???? ? ??? ???? ???????????? ????????????, ?? ?? ?????? ??????? ?????????? ??? ?? ???? ????????, ???????? ???? ????????, ? ????? ?????????? ??? ???????. ??? ???? ???????? ????? ????? ????? ? ??????? ????? ?????????? ???? ? ???? ?????????.
- ?????????? ????????? ???????? ??? ?? ?????????. ??? ????????? .NET ?????????? ???????????? ??? ???????? ???????? ?????????? ????????? ?? ?????????, ??? ????? ???? ? ?????????? ????. ????????? ? TLS12 (??????? ???????? ???????? ??????????, ??? ????? ??????) ????? ???????? ??????> ?????? , ?? ????? 5 ??? ????? ?????? ???????? ?????????? ???????.
- ???? ??? ????????????? ????? ?????????? ????????, ?? ?????? ??????????? ??????????? ??????? ??? ? ????????? ?????????????????? ?????????? ??? AppDomain ? ????? ?????? ????????? ????? ??? ? ????? ???????? ?????????. ?????? ??? ??? ???? ?????????? ????????, ??????? ????????? ?? ? ??????? ???? ?????????? ???????? ?????? ? ?????????????. ?????: https://stackoverflow.com/a/26754917/7656 ???? ????????? ??????? ??????????? ????????????????? ?????? , (???????? ????????, ? ????? ?? ???????????.)
> ??? ???? ???????? ??? ???? ? MVC WebClient
public string DownloadSite(string RefinedLink)
{
try
{
Uri address = new Uri(RefinedLink);
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
using (WebClient webClient = new WebClient())
{
var stream = webClient.OpenRead(address);
using (StreamReader sr = new StreamReader(stream))
{
var page = sr.ReadToEnd();
return page;
}
}
}
catch (Exception e)
{
log.Error("DownloadSite - error Lin = " + RefinedLink, e);
return null;
}
}
> ??? ?? ?????? ???????, ??? ???? ????? ??????, ??? ????? ?????????. ????? ? ????? ?? ????????, ?????? ??? ? ?????????? ? ...
> ???? ?? ?????????? ????????WebRequest.Timeout
? 0
, ??? ??????????, ??????? ?????????????. ???? ???????? ???, ??????? ? ???? ... (?? ??????????? ?????? ???????? ?????????? 0
??? ???????? ????-????, ? ???? ????????, ??????? ??? ??????????? ?????????? ? 0
).
WebRequest webRequest = WebRequest.Create(@"https://myservice/path");
webRequest.ContentType = "text/html";
webRequest.Method = "POST";
string body = "...";
byte[] bytes = Encoding.ASCII.GetBytes(body);
webRequest.ContentLength = bytes.Length;
var os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
webRequest.Timeout = 0; //setting the timeout to 0 causes the request to fail
WebResponse webResponse = webRequest.GetResponse(); //Exception thrown here ...
> ?????? ????????? ???????? ?????? The request was aborted: Could not create SSL/TLS secure channel
???????? ??????> ?????????????? ????? ???????????? ?????????? cipher_suites ?????? ??????????? ??????????, ? ????????, ??? ?????? ???????? ??? ????? ? ????? ??????? . ? ???? ??????, ????? ?????? ???????? ?????? ???????? cipher_suites, ??? ??? ? ????????? ??????? ? ????? ?????????????? SSL ??????????? / ??????????? «Client Hello» ?????????, ?????? ?????, ??? ?? ???? ?? ??????????????? ???????? ?? ???????? ???????????, ? ????? ?????????? «?????????? "????? ?????? ????, ????? ??????? ?„“??? ??????? ?????? ?? SSL ???????????.
- HKLM \ SOFTWARE \ Policies \ Microsoft \ Cryptography \ Configuration \ SSL \ 00010002
- HKLM \ SYSTEM \ CurrentControlSet \ Control \ Cryptography \ Configuration \ Local \ SSL \ 00010002
Could not create SSL/TLS secure channel
: http://blog.jonschneider.com/2016/08/fix-ssl-handshaking-error-in-windows.html ?>
> ? ??????? ? ???? ????????? ? ??????? ????? ???. ?>
??????> ????? ? ?????? ????? ?????? ? .NET 4.5, ?, ???????, ??????? ??? ?? ??????.
> ?? ???? ? ??????? ?? 4.0 ? ????? ??????? ?? ?? ????????, ? ??? ???? ??????????? ??? ????? ??????? (???? ????? ? ??????? ???????? ?? 4,5 ???). > ???????? ??? ??????? ????????? ?? ??????, ?? «?????? ??? ???????:. ?? ??????? ??????? SSL / TLS ??????????? ??????» ???????? ??? ???? ??????> ? ??????, ???? ?????? ???????? ??????? ????, ????????? ???????? ????? ???? ??, ??? ???????? TLS ??? SSL ??????? ???????????? ?? ??????????.
> ??? ????? ???? ?????????? ?:> ?????? ?????????? -> ???? ? ???????? -> ???????? ???????????? -> ?????????????> Scroll ????????? ???? "Security" ? ??????? ?????
- ???????????? SSL 2.0
- ???????????? SSL 3.0
- ???????????? TLS 1.0
- ???????????? TLS 1.1 ????> ???????????? TLS 1.2

> ? ???? ??? ????????, ?????? ??? ??? web.config ????:
<httpRuntime targetFramework="4.5.2" />
>, ? ??
<httpRuntime targetFramework="4.6.1" />
> ? ???? ??????, ??????? ?????? ?????? ??????? ?????????? ?? ????? ?????????? ?? ?????? ? ????????? ?????. ????? ????, ??? ? ??? ??? ??????????, ?????? ????
?>> ???? ?? ??????????? ???? ??? ? Visual Studio, ?????????? ????????? Visual Studio ? ??????? ??????????????. ?????????? ?????????? ??? ????.
> ? ???? ??? ??? ?? ????? ?????? ? ????? ???? ????? ??????? ??????? ??????? ??? ????. ???? 3072. ??? ?????? ????????????? ????????? ?????????? ? '3072' ?????????.
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
XmlReader r = XmlReader.Create(url);
SyndicationFeed albums = SyndicationFeed.Load(r);
> ? ???? ?????? ??? ????? ????????? ???????????:
https://www.fbi.gov/feeds/fbi-in-the-news/atom.xml
https://www.wired.com/feed/category/gear/latest/rss
> System.Net.WebException: ?????? ??? ???????: ?? ??????? ??????? SSL / TLS ?????????? ?????.> ? ????? ??????, ?? ??? ? ??????? ?????????? ???????????? ???????????, ????? ?? ?? ????? ??????? ??? ????????? ???? .NET. ??-???????? .NET 4 ?? ????? ???????????? TLS v 1.2, ???? ??? ?????????. ?> > ??????????? ??? ??? ???????? ???? SchUseStrongCrypto ? ??????. ?? ?????? ?????????? / ???????? ???? ??? ? ????????? ???? ? ??????????? .reg ? ????????? ???. ?? ?????? ? ???????? ????? «????????» ? ????????.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
> ?????????? ???:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
> ???????? ????????????? ????? , ????????, ????? ?????????? ??? ??????????? ?????. ??????, ? ????????? ???????, ?? ?????? ?????????? ???????? «?? ??????? ??????? SSL / TLS ?????????? ?????» ?????? ???? ????? ????, ??? ???????????? TLS 1.2. ???? ??, ?? ?? ?????? ???????????????????? ??? ??????? ?????? ?????????????? ???????? ?? ?????????? ?????????. ??????? ????: ?????????? ?? ?????? ??????? TLS / SSL, ?????? ? ?????? ?????? ??????????? «?????». ?? ????? «???????????» ???? ?????????? SSL, ?????? ?????????? ???? ?????????????? ?????-???? ??? ???????, ????? ????????? ?????? ?????? ???????????? ??????. ?? ?? ????????? ??????? Windows, ????????? ????? ?????-???? ????? ???? ???????? (??-???????? ??-?? ??????????????? ??????? ??????????? ??????????? ?????), ???????? ??????????? ??????? ? ??????? ?????????? ?? ?????. ???? ??? ?? ????? ?????? ? ????????, ?? ?? ?????? ??????? «????????? ??? ?????????????? 40» ? ???? ????????? ??????? ? «?? ??????? ??????? SSL / TLS ??????????? ??????» ? ????? .NET ?????????.
> ? ?????????? ?????? ???????????, ??? ?????? ???? ???????????? ??????????????? ?????? ??????, ? ???????? ?????????????? ????? ?????? ????? ?????? Windows. ??? ???????? ???????, ??????? ????? ???????? ?? ???????, ?????????? ???????? ???? ??????????????? ???????? ? MSIE , (????????????? System.Net ??????????? ????? ???? ????? ?????? ??????????.) ??? ????, ????? ?????????, ????? ?????? ?????????????? ????????, ?????????? ??? ????????????? ?????????? (??? ???????, ??? ?????? ???????? ????????-?????????). ??? ?????? ?????, ?? ??????, ??? ???????> ?????? ??????? ?????? ???? ??????? ? ????????????? , ???????? ???, ??? ???? ?????????. (???????? ?? ???? ?????? ? ????????????? ????????? VM? ???? ?? ?? ???? ????????? ????, ????? ??????????? ?????? ????? ???????? ?? ?????) > ? ?????? ???? ????????, ?? ???????? ????????? ?????????????? «ECDHE_ECDSA» ?????? ? ??????? ?????????????? ???????, ????? ????????? ???????????????? ???????? ? ?????????? ?? ??????? ? ???????. ?? ???? ?? ?? ?????? (??? ?? ?????) ????????????? ??????, ? ????? ?????????????? ???????? ???? (?? ??????????? ?????) ???????? ?? ??. ????????:. ???? .NET ????????? ????? ???????????? SSL ??????? ? ????????? ????????? Python (??????? ??? ?? ???? ????? ????????, ?? ??? ?? ???????, ??? Chrome ??????? ????? ????????? ???, ??? MSIE ??????? ??????? ?? ?????????? ??????)> ?????? ??? ???? ???? ??, ??? ? ??????? ?????????? ?? IIS ? ???????? ???-??????, ? ????????? ?????????? ?? ???????, ?? ????????????, ??????? ???????? IIS ?? ????? ??????????? ?????????? ?? ???????????.
> ??? ???? ASP.NET ?????? ? ?????????? ????? ? ??????????? ? ????????? ?????????????> ? ???? ?????? ? ???? ???? ??? ????????, ????? ?????? Windows, ????????? ?????????? ? ???-???????. ????? ?? ??????? Windows, ???????, ? ????? ??? ??????.
> ??? ??????? 36888 (Schannel) ???????????: ?>
The following fatal alert was generated: 40. The internal error state is 808.
> ???????, ??? ???? ??????? ? Hotfix Windows. ? ???? ??????: KB3172605 ? KB3177186
> ???????????? ??????? ? VMWare ?????? ???? ???????? ?????? ??????? ? ?????. ????? ?????????? ?????????? ??????? ??? ??????? ????????.
> [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ KeyExchangeAlgorithms \ ?????-????????]> "ClientMinKeyBitLength" = DWORD: 00000200 > ??-????????, ??? ??????? ? ????????????? ????????? ? HTTPS ??????????? ?? ??????? ???????. > ?????? ????? ???? HotFix:
wmic qfe list
> ??????? ?????:
> https://communities.vmware.com/message/2604912#2604912 ?>
> ??????? ??? ????????.
> ?? ???? ?? ??????? ???????? ??? ????.
> ??? ??, ??? ????????: > ?????? ????, ????? ???????????????? ???X509Certifiacte2
????????? ???????:
var certificate = new X509Certificate2(bytes, pass);
> ? ?????? ??? ???:
var certificate = new X509Certificate2(bytes, pass, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
??????> ???????? ???????? ?? X509KeyStorageFlags.Exportable
??????> !!
WebRequest
):
// I'm not even sure the first two lines are necessary:
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
request = (HttpWebRequest)WebRequest.Create(string.Format("https://{0}.sii.cl/cvc_cgi/dte/of_solicita_folios", server));
request.Method = "GET";
request.Referer = string.Format("https://hercules.sii.cl/cgi_AUT2000/autInicio.cgi?referencia=https://{0}.sii.cl/cvc_cgi/dte/of_solicita_folios", servidor);
request.UserAgent = "Mozilla/4.0";
request.ClientCertificates.Add(certificate);
request.CookieContainer = new CookieContainer();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
// etc...
}
> ?? ????? ???? ? ???? ?? ??????, ??? ?????? ??? ?????? ????? ...
> ???? ?????? ????? ????? ????? ???????, ????????? ???? ???? ? ????????? ????? ??????. ?? ??????????? ? ???? ????????? ?? ????????? ?? ????? ????????, ?? ?? ???? ?????? ????????. ????? ???????????? ??????????? ????? ?????, ?? ??????????, ??? ??? ?????? Microsoft.
> https://support.microsoft.com/en-us/help/4458166/applications-that-rely-on-tls-1-2-strong-encryption-experience-connect ?> > ?? ????????, MS ????????????, ??? ?? ?????? ????? ?????? ??????????, ?? ???????????? ??????? ?? ????? ??????????, ????? ?????? TLS 1.2, ??? ??? ?? ???????? ???????? «?????? ??? ???????:. ?? ??????? ??????? SSL / TLS ??????????? ??????» > ???? ??? ???????????. ?> > 1) Patch ?? ? ??????????????? ???????????: HTTP: / /www.catalog.update.microsoft.com/Search.aspx?q=kb4458166 ?> > 2) ???????? ???????? ? ???? app.config / ???? web.config. > 3) ???????? ???????? ???????, ??????? ??? ??? ???????? ? ?????? ?????. > ??? ??? ??????????? ? ?????? ???? ?????? ? ???????.> ?? ?????? ??????????? ?????????? ????-?????????? (????????? ?????????? SSL ?????????? ?? ????????? ? ??????? ??????), ????? ?????????, ???? ???????? ??????? ? CERT ???????????????? ??? ???.
> ???? ??? ???????????? «?????» ?????? ? ?????, ??? ? ????? ?? ???????? ????? ???????. ??? ??????????? ???????? ??, ??? ?????? ?????? ?? ???????????? SSL 3.0 ??-?? ???????? ? ?????????? ??????. ???????????? ? ?????????? Google ?? ????? ???????. ? ?????????? ? ???? ????????? ? ??????????? ???-????? ????? ? ?????, ???-?? ???????? ????. ? ???????????? ?? TLS 1.2 ? ??? ????? ????????.
Http: //googleonlinesecurity.blogspot. ??? / 2014/10 / ???-??????-?????-?????????????-SSL-30.html
> ??? ??????????? ??? ???? ?????? ?? ????? ?????, ? ???????????, ??? ??? ???? ?????? RC4 ????? ????????. ? ?????????? ??????, ????? ?????????? ??????, ? ???????? ???? RC4, ????? ? ????? ??????? ???? ?????? ??? ?????.