Итак, я нахожусь в процессе перехода с SQL Server на PostgreSQL и создаю временное решение на период миграции, чтобы позволить моему приложению ASP.NET подключаться к моей базе данных Heroku Postgres и использовать Entity Framework и т. д.
До сих пор мне удавалось без проблем подключиться к базе данных из pgAdmin III для Windows, но при подключении из приложения ASP.NET я получаю эту ошибку:
CertificateUnknown: сертификат сервера не принят. Состояние цепочки: цепочка сертификатов обработана, но завершена корневым сертификатом, которому не доверяет поставщик доверия. . Указанное имя хоста отсутствует в сертификате.
Я все еще довольно новичок в героку, но не имеет смысла, почему я могу подключиться из pgAdmin с теми же настройками, что и мое приложение ASP.NET, но это не работает в самом приложении.
Полная трассировка стека:
[ClientAlertException: CertificateUnknown: сертификат сервера не принят. Состояние цепочки: цепочка сертификатов обработана, но завершена корневым сертификатом, которому не доверяет поставщик доверия. . Указанное имя хоста отсутствует в сертификате.]
TlsClientStream.TlsClientStream.SendAlertFatal(описание AlertDescription, строковое сообщение) +44
TlsClientStream.TlsClientStream.ParseCertificateMessage(Byte[] buf, Int32& pos) +1359
TlsClientStream.TlsClientStream.TraverseHandshakeMessages() +415
TlsClientStream.TlsClientStream.GetInitialHandshakeMessages(Boolean allowApplicationData) +336
TlsClientStream.TlsClientStream.PerformInitialHandshake(String hostName, X509CertificateCollection clientCertificates, RemoteCertificateValidationCallback remoteCertificateValidationCallback, Boolean checkCertificateRevocation) +198[IOException: TlsClientStream.ClientAlertException: CertificateUnknown: сертификат сервера не принят. Состояние цепочки: цепочка сертификатов обработана, но завершена корневым сертификатом, которому не доверяет поставщик доверия. . Указанное имя хоста отсутствует в сертификате. at TlsClientStream.TlsClientStream.SendAlertFatal(описание AlertDescription, строковое сообщение) at TlsClientStream.TlsClientStream.ParseCertificateMessage(Byte[] buf, Int32& pos) at TlsClientStream.TlsClientStream.TraverseHandshakeMessages() at TlsClientStream.TlsClientStream.GetInitialHandshakeMessages(Boolean allowTStreamClientApplicationData). .PerformInitialHandshake(String hostName, X509CertificateCollection clientCertificates, RemoteCertificateValidationCallback remoteCertificateValidationCallback, Boolean checkCertificateRevocation)]
TlsClientStream.TlsClientStream.PerformInitialHandshake(String hostName, X509CertificateCollection clientCertificates, RemoteCertificateValidationCallback remoteCertificateValidationCallback, Boolean checkCertificateRevocation) +289
Npgsql.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout ) +1372
Npgsql.NpgsqlConnector.Open(тайм-аут NpgsqlTimeout) +314
Npgsql.NpgsqlCon nection.OpenInternal() +461
Npgsql.NpgsqlConnection.Open() +4
Npgsql.NpgsqlServices.UsingPostgresDBConnection(соединение NpgsqlConnection, действие Action`1) +162
Npgsql.NpgsqlServices.GetDbProviderManifestToken(соединение DbConnection) +99
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken (соединение DbConnection) +87[ProviderInconnectionException: поставщик не вернул строку ProviderManifestToken.]
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(соединение DbConnection) +271
System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked( DbProviderServices providerServices, подключение DbConnection) +27В Npgsql 3.1.5 попробуйте использовать «Сертификат доверенного сервера = true» в строке подключения. Пример строки подключения: