【问题标题】:How can i solve CertificateError by AWS -S3 in Django?如何在 Django 中通过 AWS -S3 解决 CertificateError?
【发布时间】:2016-10-07 23:11:59
【问题描述】:

这是托管在 heroku + aws s3 上的应用程序,仅用于存储媒体文件。
当用户上传图片时会发生错误。

 CertificateError at /create/
 hostname 'shuboy.media.s3.amazonaws.com' doesn't match either of '*.s3.amazonaws.com', 's3.amazonaws.com'
 Request Method:    POST
 Request URL:   http://shuboy2015.herokuapp.com/create/
 Django Version:    1.9.6
 Exception Type:    CertificateError
 Exception Value:   
 hostname 'shuboy.media.s3.amazonaws.com' doesn't match either of '*.s3.amazonaws.com', 's3.amazonaws.com'
 Exception Location:    /app/.heroku/python/lib/python2.7/ssl.py in match_hostname, line 271
 Python Executable: /app/.heroku/python/bin/python
 Python Version:    2.7.10
 Python Path:   
 ['/app',
  '/app/.heroku/python/bin',
  '/app/.heroku/python/lib/python2.7/site-packages/setuptools-20.4-py2.7.egg',
  '/app/.heroku/python/lib/python2.7/site-packages/pip-8.1.1-py2.7.egg',
  '/app',
  '/app/.heroku/python/lib/python27.zip',
  '/app/.heroku/python/lib/python2.7',
  '/app/.heroku/python/lib/python2.7/plat-linux2',
  '/app/.heroku/python/lib/python2.7/lib-tk',
  '/app/.heroku/python/lib/python2.7/lib-old',
  '/app/.heroku/python/lib/python2.7/lib-dynload',
  '/app/.heroku/python/lib/python2.7/site-packages']
 Server time:   Tue, 7 Jun 2016 20:54:31 +0000

在 settings.py 文件中,我只想存储媒体文件,没有静态文件。

 DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
 AWS_S3_SECURE_URLS = False   
 AWS_QUERYSTRING_AUTH = False     
 AWS_S3_ACCESS_KEY_ID = '*******'
 AWS_S3_SECRET_ACCESS_KEY = '******'
 AWS_STORAGE_BUCKET_NAME ='shuboy.media'
 AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME     



 STATIC_URL = '/static/'
 MEDIA_URL = 'https://%s/media/' % AWS_S3_CUSTOM_DOMAIN     

 STATICFILES_DIRS = [
     os.path.join(BASE_DIR, "appname/static"),
 ]     

 STATIC_ROOT = os.path.join(BASE_DIR, "STATIC_CDN")     

 MEDIA_ROOT = '%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME     

 STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

如果有人告诉我为什么会发生这个错误,我该如何解决这个问题?任何进一步的建议将是可观的。

【问题讨论】:

    标签: django amazon-web-services heroku amazon-s3


    【解决方案1】:

    发生上述错误是因为您的存储桶名称有一个“。”在里面。

    解决此问题的方法是转到~/.boto 配置文件搜索https_validate_certificates 并将其设置为False 它将起作用。

    或者去掉“.”从您的存储桶名称中提取它以使其正常工作。

    【讨论】:

    • 我在使用 django/heroku/amazon-s3 并删除“。”时遇到了同样的问题。从我们的存储桶名称中为我们排序。虽然不知道 ~/.boto 字样,但很好。
    【解决方案2】:

    boto 包不完全支持名称中带有点的 S3 存储桶,因为 SSL 证书范围。

    要么创建并使用一个不带点的新存储桶,例如“shuboymedia”,要么在您的设置中添加这个猴子补丁:

    import ssl
    if hasattr(ssl, '_create_unverified_context'):
        ssl._create_default_https_context = ssl._create_unverified_context
    

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      相关资源
      最近更新 更多