Ошибки ERR_CERT_COMMON_NAME_INVALID и SSL_ERROR_BAD_CERT_DOMAIN со статическими файлами Django, подаваемыми из корзины S3 - PullRequest
5 голосов
/ 10 апреля 2019

У меня проблема со статическими файлами Django.Я использую админку Django и Django Rest Framework.Я пытаюсь обслуживать статические файлы для администратора и DRF с корзиной S3.Я могу успешно посетить URL любого файла в корзине, и он загрузится в моем браузере, и файл будет обслуживаться по HTTPS.

Я создал вложенный стек в CloudFormation для корзины S3:

Description: >
  This template deploys S3 buckets for serving Django static files.

Parameters:
  AppUrl:
    Type: "String"
    Description: "The URL for our app (e.g. mydomain.com)"
    AllowedPattern: "[a-z0-9._-]+"

Resources:
  AssetsBucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: !Sub ${AppUrl}-assets

  AssetsBucketPolicy:
    Type: "AWS::S3::BucketPolicy"
    Properties:
      Bucket: !Ref AssetsBucket
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
        - Sid: PublicReadForGetBucketObjects
          Effect: "Allow"
          Principal: "*"
          Action: "s3:GetObject"
          Resource: !Sub "${AssetsBucket.Arn}/static/*"

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

Когда я захожу на DRF URL с параметром запроса ?format=json.Это возвращает ответ JSON без статических файлов из API с возможностью просмотра, и я не вижу никаких ошибок.Тем не менее, когда я захожу в браузерный API или интерфейс администратора, мне кажется, что я вижу одно из трех сообщений об ошибках.В Chrome я либо вижу два типа поведения.HTTPS удаляется из URL (зачеркнуто красным), но статические ресурсы загружаются с одной из следующих двух ошибок, отображаемых в консоли:

Access to font at 'https://mydomain.com-assets.s3.amazonaws.com/static/admin/fonts/Roboto-Bold-webfont.woff' from origin 'https://api.mydomain.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

или

GET https://mydomain.com-assets.s3.amazonaws.com/static/rest_framework/css/bootstrap.min.css net::ERR_CERT_COMMON_NAME_INVALID

В Firefox статические файлы не загружаются, HTTPS не удаляется, и я вижу следующую ошибку на вкладке сети окна отладки:

An error occured: SSL_ERROR_BAD_CERT_DOMAIN

Я пыталсядобавление политики CORS в корзину с использованием следующего XML:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

Но это не решило проблему HTTPS.Есть ли что-то, чего мне не хватает, что поможет мне избавиться от перечеркнутого HTTPS?

Я уверен, что сертификат в порядке, и что проблема не связана с запросом HTTP через соединение HTTPS.Я считаю, что это проблема CORS, поэтому я не уверен, почему добавление политики корзины CORS не устранило это.

Кроме того, в моем приложении Django с CORS_ORIGIN_ALLOW_ALL = True установлены django-cors-headers..

1 Ответ

5 голосов
/ 13 апреля 2019

В соответствии с документацией по именованию сегментов S3 проблема, по-видимому, связана с точкой в ​​имени сегмента.

При использовании виртуальных сегментов размещенного стиля с Secure Sockets Layer (SSL),Подстановочный сертификат SSL соответствует только сегментам, которые не содержат точек.Чтобы обойти это, используйте HTTP или напишите свою собственную логику проверки сертификата.Мы рекомендуем вам не использовать точки (".") В именах сегментов при использовании виртуальных сегментов размещенного стиля.

Укажите имя домена в имени сегмента (замените точку на дефис)чтобы заставить его работать.

Ссылка на документацию: здесь

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