Удаленный сертификат недействителен согласно процедуре проверки для SqlClient - PullRequest
0 голосов
/ 19 сентября 2019

Я использую приложение MyHealthClinic (https://azuredevopslabs.com/labs/vstsextend/kubernetes/), которое является интерфейсом .NET Core и внутренним кластером Kubernetes, и развертываю в Google Kubernetes Engine, пытаясь подключиться к виртуальной машине SQL Server, но получаю следующую ошибку с CrashLoopBackOffкогда модуль пытается запуститься после вытягивания изображения, которое я нажал:

Unhandled Exception: System.Data.SqlClient.SqlException: A connection was successfully 
established with the server, but then an error occurred during the pre-login handshake. 
(provider: TCP Provider, error: 35 - An internal exception was caught) ---> 
System.Security.Authentication.AuthenticationException: The remote certificate is invalid 
according to the validation procedure. at 
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken ...

Я проверил свой appsettings.json, и мне кажется правильным, что он установлен как:

"DefaultConnection": "Server={my-external-IP},1433;Initial Catalog=mhcdb;Persist Security Info=False;User ID={sqlusername};Password={sqlpassword};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

Я также подтвердил:

  • Виртуальная машина SQL доступна со всех внешних IP-адресов, которые у меня есть для внешнего кластера и моей локальной машины
  • Брандмауэр на машине и длясеть VPC имеет разрешенный порт 1433
  • Я могу успешно подключиться с локального компьютера, используя тот же IP-адрес для виртуальной машины SQL, и кредиты
  • IP-адрес для строки подключения указывается без http / https

Можно ли проверить еще где-нибудь, чтобы попытаться это исправить? Я могу без проблем развернуть кластер в AKS в Azure, но не уверен, что GKE может быть блокированИсходящие соединения из кластеров.Пока единственные похожие вопросы, которые я обнаружил, связаны с SMTP-серверамиЯ немного новичок в GKE, поэтому любые идеи помогут.

Если это поможет, вот мой файл развертывания YAML (сохраняется для кластера AKS, поэтому не уверен, нужно ли что-то менять специально для GKE):

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mhc-back
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mhc-back
    spec:
      containers:
      - name: mhc-back
        image: redis
        ports:
        - containerPort: 6379
          name: redis

---

apiVersion: v1
kind: Service
metadata:
  name: mhc-back
spec:
  ports:
  - port: 6379
  selector:
    app: mhc-back

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mhc-front
spec:
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5 
  template:
    metadata:
      labels:
        app: mhc-front
    spec:
      containers:
      - name: mhc-front
        image: {gcr.io/[Project-Id]}/myhealth.web:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 250m
          limits:
            cpu: 500m
        env:
        - name: REDIS
          value: "mhc-back"

---

apiVersion: v1
kind: Service
metadata:
  name: mhc-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: mhc-front

1 Ответ

0 голосов
/ 19 сентября 2019

После того, как я начал выяснять, почему удаленный сертификат (SQL) был недействительным, я изменил строку подключения, включив в нее TrustServerCertificate = True.Поскольку это демонстрационная среда, и я сохранил Encrypt = True, то похоже, что это все исправлено!Если кто-то думает, что обход серверных сертификатов - плохая идея, дайте мне знать.

"DefaultConnection": "Server={my-external-IP},1433;Initial Catalog=mhcdb;Persist Security Info=False;User ID={sqlusername};Password={sqlpassword};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...