Problems arise
Minio’s server always uses HTTP for access, but recently, due to business requirements, all requests have been replaced with HTTPS requests. After changing to HTTPS, this error will be reported when uploading the file: urlib3. Exceptions. Maxretryerror: httpsconnectionpool (host = ‘10.10.30.241’, port = 9000): Max retries exceeded with URL:/Facebook?Location = (caused by sslerror (sslcertverificationerror (1, ‘[SSL: Certificate_ VERIFY_ FAILED] certificate verify failed: self signed certificate (_ ssl.c:1124)’)))
Solution 1
Because I saw that the error was reported by urlib, I directly searched the urlib source code and directly modified the urlib 3 source code to solve the problem.
the modified file is: connectionpool.py
modify line 775 of connectionpool.py file:
self.cert_reqs = 'CERT_NONE'
Solution 2
The first method is solved, but it is extremely inconvenient
because you need to modify the source code every time you need to change the deployment script or reinstall it
then I went through the Minio source code and found the problem
the urliib in Minio did not turn off SSL verification. I wanted to change it here, but I thought of changing the source code here. I looked carefully and found the next parameter: http_ client
We only need to customize this parameter when creating Minio objects
minioClient = Minio(
'1.1.1.1:9000',
access_key='mxxxxxxx',
secret_key='mxxxxxxx',
http_client=urllib3.PoolManager(
timeout=urllib3.util.Timeout(connect=10, read=10),
maxsize=10,
cert_reqs='CERT_NONE',
ca_certs= os.environ.get('SSL_CERT_FILE') or certifi.where(),
retries=urllib3.Retry(
total=5,
backoff_factor=0.2,
status_forcelist=[500, 502, 503, 504]
)
)
# secure=False
)
So far, the problem is solved
Attach Minio file to upload all codes
import logging
from minio import Minio
from minio.error import S3Error
import urllib3
import certifi
import os
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
logging.basicConfig(
level=logging.INFO,
filename='../mysqlbackup_up.log',
filemode='a',
format='%(asctime)s %(name)s %(levelname)s--%(message)s'
)
def upload_file(file_name, file_path):
minioClient = Minio(
'1.1.3.1:9000',
access_key='mxxxxx',
secret_key='mxxxxxx',
http_client=urllib3.PoolManager(
timeout=urllib3.util.Timeout(connect=10, read=10),
maxsize=10,
cert_reqs='CERT_NONE',
ca_certs= os.environ.get('SSL_CERT_FILE') or certifi.where(),
retries=urllib3.Retry(
total=5,
backoff_factor=0.2,
status_forcelist=[500, 502, 503, 504]
)
)
# secure=False
)
check_bucket = minioClient.bucket_exists("test")
if not check_bucket:
minioClient.make_bucket("test")
try:
logging.info("start upload file")
minioClient.fput_object(bucket_name="test", object_name=file_name, file_path=file_path)
logging.info("file {0} is successfully uploaded".format(file_name))
print('success')
except FileNotFoundError as err:
print(err)
logging.error('upload_failed: ' + str(err))
except S3Error as err:
print(err)
logging.error("upload_failed:", err)