Запрос был прерван: не Мог создать безопасный канал SSL/TLS

Ecto.Changeset.unique_constraint/3 должны быть подкреплены реальным уникальным ограничением в базе данных . Вот выдержка из документации:

Чтобы использовать ограничение уникальности, первым шагом является определение уникального индекса в миграции:

create unique_index(:users, [:email])
blockquote> [118 ] Ecto.Changeset.unique_constraint/3 построен для соответствия шаблону только существующим уникальным ограничениям, поэтому, если в базе данных такого ограничения нет, возбуждается FunctionClauseError.

347
задан Caio Proiete 8 February 2018 в 09:42
поделиться

9 ответов

Наконец-то я нашел ответ (Я не указал свой источник, но это было из поиска);

Хотя код работает в Windows XP, в Windows 7 вы должны добавить это в начале:

// using System.Net;
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// Use SecurityProtocolType.Ssl3 if needed for compatibility reasons

И теперь он работает отлично.


ДОБАВЛЕНИЕ

Как упомянул Робин Френч; Если у вас возникла эта проблема при настройке PayPal, обратите внимание, что они не будут поддерживать SSL3, начиная с 3 декабря 2018 года. Вам нужно будет использовать TLS. Вот страница Paypal об этом.

505
ответ дан 23 November 2019 в 00:28
поделиться

Другая возможность состоит в том, что выполненный код не имеет необходимых предварительных миссий.

В моем случае, я получил эту ошибку при использовании отладчика Visual Studio для тестирования вызова к веб-сервису. Visual Studio не работала как Администратор, который вызвал это исключение.

4
ответ дан 23 November 2019 в 00:28
поделиться

Одной из самых больших причин этой проблемы является активная версия Платформы.NET. Влияние версии среды выполнения платформы.NET, которое протоколы системы защиты включены по умолчанию.

, кажется, нет никакой авторитетной документации относительно того, как она конкретно работает в различных версиях, но кажется, что значения по умолчанию определяются более или менее следующим образом:

  • Платформа.NET 4.5 и ранее - SSL 3.0, платформа TLS 1.0
  • .NET 4.6.x - TLS 1.0, 1.1, 1.2, 1.3
  • Платформа.NET 4.7 + - Система (ОС) Значения по умолчанию

(Для более старых версий, Ваш пробег может варьироваться несколько, на основе которого время выполнения.NET установлено в системе. Например, могла быть ситуация, где Вы используете очень старую платформу, и TLS 1.0 не поддерживается, или использующий 4.6.x, и TLS 1.3 не поддерживается)

, документация Microsoft настоятельно рекомендует использовать 4.7 + и системные значения по умолчанию:

Мы рекомендуем что Вы:

  • Цель Платформа.NET 4.7 или более поздние версии на Ваших приложениях. Будьте нацелены на Платформу.NET 4.7.1 или более поздние версии на Ваших приложениях WCF.
  • не указывают версию TLS. Настройте свой код, чтобы позволить ОС выбрать версию TLS.
  • Выполняют полную проверку соответствия программы спецификациям, чтобы проверить, что Вы не указываете версия SSL или TLS.

Для сайтов ASP.NET , проверьте версию платформы.NET в Ваш <httpRuntime> элемент, поскольку это определяет, какое время выполнения на самом деле используется Вашим сайтом:

<httpRuntime targetFramework="4.5" />

Лучше:

<httpRuntime targetFramework="4.7" />
3
ответ дан 23 November 2019 в 00:28
поделиться

Проблема в том, что у пользователя aspNet нет доступа к сертификату. Вы должны предоставить доступ, используя winhttpcertcfg.exe

. Пример того, как это настроить, находится по адресу: http://support.microsoft.com/kb/901183

В шаге 2 в дополнительной информации

РЕДАКТИРОВАТЬ: В более поздних версиях IIS эта функция встроена в инструмент диспетчера сертификатов - и может можно получить, щелкнув сертификат правой кнопкой мыши и используя опцию управления закрытыми ключами. Подробнее здесь: https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791

31
ответ дан 23 November 2019 в 00:28
поделиться

Ошибка общего характера, и существует множество причин, по которым согласование SSL / TLS может не сработать. Чаще всего это недействительный или просроченный сертификат сервера, и вы позаботились об этом, предоставив свой собственный крючок для проверки сертификата сервера, но это не обязательно единственная причина. Серверу может потребоваться взаимная аутентификация, он может быть настроен с использованием наборов шифров, не поддерживаемых вашим клиентом, у него может быть слишком большой временной сдвиг для успешного рукопожатия и по многим другим причинам.

Лучшее решение - использовать набор инструментов устранения неполадок SChannel. SChannel - это провайдер SSPI, отвечающий за SSL и TLS, и ваш клиент будет использовать его для рукопожатия. Взгляните на Инструменты и настройки TLS / SSL .

См. Также Как включить ведение журнала событий канала .

27
ответ дан 23 November 2019 в 00:28
поделиться

У меня была эта проблема, загружающая видео на Wistia с помощью приложения командной строки. Наш системный администратор решил вопрос путем включения дополнительных наборов шифров с помощью IIScrypto, который был перечислен на сканировании лабораторий SSL для upload.wistia.com

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) FS 128 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 DH 2 048 битов (0x9f) FS 256

DH 2 048 битов
0
ответ дан 23 November 2019 в 00:28
поделиться

Подход с установкой

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

, Кажется, хорошо, потому что Tls1.2 является последней версией защищенного протокола. Но я решил посмотреть глубже и ответить, делают нам действительно нужен к hardcode он.

Спецификации: Windows Server 2012R2 x64.

Из Интернета там сказан, что.NetFramework 4.6 + должен использовать Tls1.2 по умолчанию. Но когда я обновил свой проект к 4,6, ничего не произошло. Я нашел некоторую информацию, которая говорит, что я должен вручную сделать некоторые изменения для включения Tls1.2 значением по умолчанию

https://support.microsoft.com/en-in/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi

[1 18], Но предложенное обновление окон не работает на версию

R2, Но что помогло мне, добавляют 2 значения к реестру. Можно использовать следующий сценарий PS, таким образом, они будут добавлены автоматически

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

, Который является отчасти, что я искал. Но тем не менее я не могу ответить на вопрос, почему NetFramework 4.6 + не устанавливает это... Значение протокола автоматически?

2
ответ дан 23 November 2019 в 00:28
поделиться

Удивительно даже при том, что проект работал отлично после несколько раз обновления базы данных, внезапно это прекратило работать и после удаления базы данных от ssms, команда Update-Database -Force больше не работала!

я перезапустил Visual Studio, созданная база данных вручную, включил миграции снова и снова, строку измененного соединения, и ничего не произошло!

, В конце концов, я придумал, делают проект как Проект Запуска, и все получило работу снова!

0
ответ дан 23 November 2019 в 00:28
поделиться

Вы можете попробовать установить демонстрационный сертификат (некоторые провайдеры SSL предлагают их бесплатно в течение месяца), чтобы убедиться, связана ли проблема с действительностью сертификата или нет.

1
ответ дан 23 November 2019 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: