在 s3 服务器中复制文件时出现 ssl 错误?

发布于 2025-01-15 02:50:48 字数 8329 浏览 2 评论 0原文

我尝试使用以下命令在 S3 服务器上为我的 Django 项目收集静态文件:

python manage.py collectstatic

但由于 SSLError 失败:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\httpsession.py", line 414, in send
    chunked=self._chunked(request.headers),
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 756, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\util\retry.py", line 507, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\packages\six.py", line 769, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 706, in urlopen
    chunked=chunked,
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 382, in _make_request
    self._validate_conn(conn)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 1010, in _validate_conn
    conn.connect()
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connection.py", line 421, in connect
    tls_in_tls=tls_in_tls,
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\util\ssl_.py", line 450, in ssl_wrap_socket
    sock, context, tls_in_tls, server_hostname=server_hostname
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 423, in wrap_socket
    session=session
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 870, in _create
    self.do_handshake()
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1139, in do_handshake
    self._sslobj.do_handshake()
urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 187, in handle
    collected = self.collect()
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 114, in collect
    handler(path, prefixed_path, storage)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 338, in copy_file
    if not self.delete_file(path, prefixed_path, source_storage):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 248, in delete_file
    if self.storage.exists(prefixed_path):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\storages\backends\s3boto3.py", line 469, in exists
    self.connection.meta.client.head_object(Bucket=self.bucket_name, Key=name)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\client.py", line 395, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\client.py", line 712, in _make_api_call
    operation_model, request_dict, request_context)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\client.py", line 731, in _make_request
    return self._endpoint.make_request(operation_model, request_dict)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 107, in make_request
    return self._send_request(request_dict, operation_model)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 184, in _send_request
    success_response, exception):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 308, in _needs_retry
    caught_exception=caught_exception, request_dict=request_dict)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\hooks.py", line 357, in emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\hooks.py", line 228, in emit
    return self._emit(event_name, kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\hooks.py", line 211, in _emit
    response = handler(**kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 192, in __call__
    if self._checker(**checker_kwargs):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 266, in __call__
    caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 292, in _should_retry
    return self._checker(attempt_number, response, caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 332, in __call__
    caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 232, in __call__
    attempt_number, caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 374, in _check_caught_exception
    raise caught_exception
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 249, in _do_get_response
    http_response = self._send(request)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 321, in _send
    return self.http_session.send(request)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\httpsession.py", line 432, in send
    raise SSLError(endpoint_url=request.url, error=e)
botocore.exceptions.SSLError: SSL validation failed for https://kol-mevasser-content.s3.eu-west-3.amazonaws.com/static/favicon.ico [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)

所以我尝试使用 pip install certifi 安装 certifi 但它不起作用。

如何将静态文件收集到 S3 服务器中并解决此 SSL 错误?

这是我的 settings.py 文件:

# (I voluntary put SECRET)
AWS_ACCESS_KEY_ID = "SECRET"
AWS_SECRET_ACCESS_KEY = "SECRET"
AWS_STORAGE_BUCKET_NAME = "SECRET"

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
AWS_S3_REGION_NAME = 'eu-west-3'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
    

I tried to collect static files on the S3 Server for my Django project with the command :

python manage.py collectstatic

But It failed because of SSLError :

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\httpsession.py", line 414, in send
    chunked=self._chunked(request.headers),
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 756, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\util\retry.py", line 507, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\packages\six.py", line 769, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 706, in urlopen
    chunked=chunked,
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 382, in _make_request
    self._validate_conn(conn)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connectionpool.py", line 1010, in _validate_conn
    conn.connect()
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\connection.py", line 421, in connect
    tls_in_tls=tls_in_tls,
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\util\ssl_.py", line 450, in ssl_wrap_socket
    sock, context, tls_in_tls, server_hostname=server_hostname
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 423, in wrap_socket
    session=session
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 870, in _create
    self.do_handshake()
  File "C:\Users\Anthony\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1139, in do_handshake
    self._sslobj.do_handshake()
urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\core\management\base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 187, in handle
    collected = self.collect()
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 114, in collect
    handler(path, prefixed_path, storage)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 338, in copy_file
    if not self.delete_file(path, prefixed_path, source_storage):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 248, in delete_file
    if self.storage.exists(prefixed_path):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\storages\backends\s3boto3.py", line 469, in exists
    self.connection.meta.client.head_object(Bucket=self.bucket_name, Key=name)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\client.py", line 395, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\client.py", line 712, in _make_api_call
    operation_model, request_dict, request_context)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\client.py", line 731, in _make_request
    return self._endpoint.make_request(operation_model, request_dict)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 107, in make_request
    return self._send_request(request_dict, operation_model)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 184, in _send_request
    success_response, exception):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 308, in _needs_retry
    caught_exception=caught_exception, request_dict=request_dict)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\hooks.py", line 357, in emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\hooks.py", line 228, in emit
    return self._emit(event_name, kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\hooks.py", line 211, in _emit
    response = handler(**kwargs)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 192, in __call__
    if self._checker(**checker_kwargs):
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 266, in __call__
    caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 292, in _should_retry
    return self._checker(attempt_number, response, caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 332, in __call__
    caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 232, in __call__
    attempt_number, caught_exception)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\retryhandler.py", line 374, in _check_caught_exception
    raise caught_exception
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 249, in _do_get_response
    http_response = self._send(request)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\endpoint.py", line 321, in _send
    return self.http_session.send(request)
  File "C:\Users\Anthony\Documents\website_django\venv\lib\site-packages\botocore\httpsession.py", line 432, in send
    raise SSLError(endpoint_url=request.url, error=e)
botocore.exceptions.SSLError: SSL validation failed for https://kol-mevasser-content.s3.eu-west-3.amazonaws.com/static/favicon.ico [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)

So I tried to install certifi with pip install certifi but it didn't work.

How can I collect my static files into S3 Server with resolving this SSL Error ?

Here is in my settings.py file :

# (I voluntary put SECRET)
AWS_ACCESS_KEY_ID = "SECRET"
AWS_SECRET_ACCESS_KEY = "SECRET"
AWS_STORAGE_BUCKET_NAME = "SECRET"

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
AWS_S3_REGION_NAME = 'eu-west-3'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文