From 98068046e9be867ab2d38ba80b7e15cc106e78d5 Mon Sep 17 00:00:00 2001 From: Brian Martin Date: Fri, 1 Feb 2019 01:47:14 -0500 Subject: [PATCH] Working with app and Add CA Tested with the EcoVacs app, almost everything works. CA Added for managing certs. A self-signed may work as well. TBD --- bumper.py | 2 +- bumper/__init__.py | 6 + bumper/confserver.py | 200 ++++++++++++++++++-------- bumper/mqttserver.py | 21 ++- bumper/xmppserver.py | 6 +- certs/CA/cacert.pem | 85 +++++++++++ certs/CA/careq.pem | 18 +++ certs/CA/certreqs/bumper_req.txt | 19 +++ certs/CA/certsdb/99BD46167599BDB4.pem | 85 +++++++++++ certs/CA/certsdb/99BD46167599BDB5.pem | 85 +++++++++++ certs/CA/index.txt | 2 + certs/CA/index.txt.attr | 1 + certs/CA/index.txt.attr.old | 1 + certs/CA/index.txt.old | 1 + certs/CA/openssl.cnf | 180 +++++++++++++++++++++++ certs/CA/private/cakey.pem | 30 ++++ certs/CA/private/key.pem | 28 ++++ certs/CA/serial | 1 + certs/CA/serial.old | 1 + certs/cert.pem | 114 +++++++++++---- certs/cert.pem.bak | 33 +++++ certs/key.pem | 79 ++++------ certs/key.pem.bak | 51 +++++++ 23 files changed, 895 insertions(+), 154 deletions(-) create mode 100644 certs/CA/cacert.pem create mode 100644 certs/CA/careq.pem create mode 100644 certs/CA/certreqs/bumper_req.txt create mode 100644 certs/CA/certsdb/99BD46167599BDB4.pem create mode 100644 certs/CA/certsdb/99BD46167599BDB5.pem create mode 100644 certs/CA/index.txt create mode 100644 certs/CA/index.txt.attr create mode 100644 certs/CA/index.txt.attr.old create mode 100644 certs/CA/index.txt.old create mode 100644 certs/CA/openssl.cnf create mode 100644 certs/CA/private/cakey.pem create mode 100644 certs/CA/private/key.pem create mode 100644 certs/CA/serial create mode 100644 certs/CA/serial.old create mode 100644 certs/cert.pem.bak create mode 100644 certs/key.pem.bak diff --git a/bumper.py b/bumper.py index efbcd8c..5f004d7 100644 --- a/bumper.py +++ b/bumper.py @@ -5,7 +5,7 @@ import bumper import sys, socket import time -logging.basicConfig(level=logging.DEBUG, +logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)-8s %(message)s') #conf_address = (socket.gethostbyname(socket.gethostname()), 443) diff --git a/bumper/__init__.py b/bumper/__init__.py index 574ad3a..3195f7f 100644 --- a/bumper/__init__.py +++ b/bumper/__init__.py @@ -6,8 +6,14 @@ from .mqttserver import MQTTHelperBot from .xmppserver import XMPPServer import asyncio import contextvars +import time bumper_clients_var = contextvars.ContextVar('bumper_clients', default=[]) +current_milli_time = lambda: int(round(time.time() * 1000)) + +def get_milli_time(timetoconvert): + return int(round(timetoconvert * 1000)) + class VacBotDevice(object): def __init__(self,did="", vac_bot_device_class="",resource="" , name="", nick="", company="eco-ng"): diff --git a/bumper/confserver.py b/bumper/confserver.py index d3edc3d..78e11c7 100644 --- a/bumper/confserver.py +++ b/bumper/confserver.py @@ -2,16 +2,21 @@ from http.server import HTTPServer from http.server import BaseHTTPRequestHandler -#from http.server import SimpleHTTPRequestHandler from http import HTTPStatus from threading import Thread import socket, logging, ssl, json, sys import asyncio import contextvars -import bumper import string import random +import bumper +import time +from datetime import datetime, timedelta +import threading +from socketserver import ThreadingMixIn +class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): + """Handle requests in a separate thread.""" class RequestHandler(BaseHTTPRequestHandler): bumper_clients = contextvars.ContextVar @@ -23,48 +28,77 @@ class RequestHandler(BaseHTTPRequestHandler): content_length = int(self.headers['Content-Length']) post_data = self.rfile.read(content_length) logging.debug("Headers: " + str(self.headers)) - request_body = post_data.decode('utf-8') - logging.debug("Request: " + request_body) - json_body = json.loads(request_body) - if "getProductIotMap" in str(self.path): - body = {"code":0,"data":[{"classid":"dl8fht","product":{"_id":"5acb0fa87c295c0001876ecf","name":"DEEBOT 600 Series","icon":"5acc32067c295c0001876eea","UILogicId":"dl8fht","ota":False,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5acc32067c295c0001876eea"}},{"classid":"02uwxm","product":{"_id":"5ae1481e7ccd1a0001e1f69e","name":"DEEBOT OZMO Slim10 Series","icon":"5b1dddc48bc45700014035a1","UILogicId":"02uwxm","ota":False,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b1dddc48bc45700014035a1"}},{"classid":"y79a7u","product":{"_id":"5b04c0227ccd1a0001e1f6a8","name":"DEEBOT OZMO 900","icon":"5b04c0217ccd1a0001e1f6a7","UILogicId":"y79a7u","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b04c0217ccd1a0001e1f6a7"}},{"classid":"jr3pqa","product":{"_id":"5b43077b8bc457000140363e","name":"DEEBOT 711","icon":"5b5ac4cc8d5a56000111e769","UILogicId":"jr3pqa","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b5ac4cc8d5a56000111e769"}},{"classid":"uv242z","product":{"_id":"5b5149b4ac0b87000148c128","name":"DEEBOT 710","icon":"5b5ac4e45f21100001882bb9","UILogicId":"uv242z","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b5ac4e45f21100001882bb9"}},{"classid":"ls1ok3","product":{"_id":"5b6561060506b100015c8868","name":"DEEBOT 900 Series","icon":"5ba4a2cb6c2f120001c32839","UILogicId":"ls1ok3","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5ba4a2cb6c2f120001c32839"}}]} - elif "notify_engine.do" in str(self.path): - body = {"ret":"ok"} - elif "iot/devmanager.do" in str(self.path): #Handle rest commands - randomid = ''.join(random.sample(string.ascii_letters,6)) - retcmd = self.helperbot.send_command(json_body, randomid) - body = retcmd - else: - todo = json_body['todo'] - if todo == 'FindBest': - service = json_body['service'] - if service == 'EcoMsgNew': - body = {"result":"ok","ip":socket.gethostbyname(socket.gethostname()),"port":5223} - elif service == 'EcoUpdate': - body = {"result":"ok","ip":"47.88.66.164","port":8005} - elif todo == 'loginByItToken': - body = { - "todo": "result", - "result": "ok", - "userId": json_body["userId"], - "resource": json_body["resource"], - "token": json_body["token"] - } - elif todo == 'GetDeviceList': - active_bots = self.bumper_clients.get() - body = { - "devices": active_bots, - "result": "ok", - "todo": "result" - } - body = json.dumps(body) - logging.debug("Response: " + body) - body = body.encode() + body = {} + if "app_logs" in str(self.path): + body = {} + + else: + request_body = post_data.decode('utf-8') + logging.debug("Request: " + request_body) + json_body = json.loads(request_body) + + if "/product/getProductIotMap" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("getProductIotMap Path Split: %s" %psplit) + body = {"code":0,"data":[{"classid":"dl8fht","product":{"_id":"5acb0fa87c295c0001876ecf","name":"DEEBOT 600 Series","icon":"5acc32067c295c0001876eea","UILogicId":"dl8fht","ota":False,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5acc32067c295c0001876eea"}},{"classid":"02uwxm","product":{"_id":"5ae1481e7ccd1a0001e1f69e","name":"DEEBOT OZMO Slim10 Series","icon":"5b1dddc48bc45700014035a1","UILogicId":"02uwxm","ota":False,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b1dddc48bc45700014035a1"}},{"classid":"y79a7u","product":{"_id":"5b04c0227ccd1a0001e1f6a8","name":"DEEBOT OZMO 900","icon":"5b04c0217ccd1a0001e1f6a7","UILogicId":"y79a7u","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b04c0217ccd1a0001e1f6a7"}},{"classid":"jr3pqa","product":{"_id":"5b43077b8bc457000140363e","name":"DEEBOT 711","icon":"5b5ac4cc8d5a56000111e769","UILogicId":"jr3pqa","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b5ac4cc8d5a56000111e769"}},{"classid":"uv242z","product":{"_id":"5b5149b4ac0b87000148c128","name":"DEEBOT 710","icon":"5b5ac4e45f21100001882bb9","UILogicId":"uv242z","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5b5ac4e45f21100001882bb9"}},{"classid":"ls1ok3","product":{"_id":"5b6561060506b100015c8868","name":"DEEBOT 900 Series","icon":"5ba4a2cb6c2f120001c32839","UILogicId":"ls1ok3","ota":True,"iconUrl":"https://portal-ww.ecouser.net/api/pim/file/get/5ba4a2cb6c2f120001c32839"}}]} + elif "notify_engine.do" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("notify_engine Path Split: %s" %psplit) + body = {"ret":"ok"} + elif "iot/devmanager.do" in str(self.path): #Handle rest commands + psplit = str(self.path).split("/") + logging.debug("devmanager Path Split: %s" %psplit) + randomid = ''.join(random.sample(string.ascii_letters,6)) + retcmd = self.helperbot.send_command(json_body, randomid) + body = retcmd + elif "/users/user.do" in str(self.path): #Handle user commands + psplit = str(self.path).split("/") + logging.debug("userdo Path Split: %s" %psplit) + todo = json_body['todo'] + if todo == 'FindBest': + service = json_body['service'] + if service == 'EcoMsgNew': + body = {"result":"ok","ip":socket.gethostbyname(socket.gethostname()),"port":5223} + elif service == 'EcoUpdate': + body = {"result":"ok","ip":"47.88.66.164","port":8005} + elif todo == 'loginByItToken': + psplit = str(self.path).split("/") + logging.debug("LoginByItToken Split: %s" %psplit) + body = { + "resource": json_body["resource"], + "result": "ok", + "todo": "result", + "token": json_body["token"], #RandomChar(32) + "userId": json_body["userId"] #RandomChar(16) + } + #TODO: Randomize + #self.send_header("ETag", "ETag1234") + elif todo == 'GetDeviceList': + active_bots = self.bumper_clients.get() + body = { + "devices": active_bots, + "result": "ok", + "todo": "result" + } + + elif "ESTInt" in str(self.path): #Handle user commands: + psplit = str(self.path).split("/") + logging.debug("bigdata Path Split: %s" %psplit) + {"header":{"result_code":"000000"},"body":{}} + else: + psplit = str(self.path).split("/") + logging.debug("Other Post Path Split: %s" %psplit) + body = {} + + body = json.dumps(body) + logging.debug("Response: " + str(body)) + body = body.encode(encoding='UTF-8') self.send_response(HTTPStatus.OK) self.send_header('Content-Type', 'application/json; charset=utf-8') self.send_header('Connection', 'keep-alive') self.send_header('Content-Length', len(body)) self.end_headers() + self.wfile.write(body) except Exception as e: logging.error('ConfServer POST: {}'.format(e)) @@ -74,35 +108,39 @@ class RequestHandler(BaseHTTPRequestHandler): self.protocol_version = 'HTTP/1.1' logging.debug("Path: " + self.path) - if "/login?" in str(self.path): - #Could implement basic auth if you wanted, or just accept anything - #Next up parse the path for variables + if "/user/login?" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("Login Path Split: %s" %psplit) + #Could implement basic auth if you wanted, or just accept anything body = { "code": "0000", "data": { - "accessToken": "temp_accesstoken", - "country": "us", + "accessToken": "tempaccesstoken", #Random chars 32 length + "country": psplit[3], "email": "null@null.com", - "uid": "fuid_1", - "username": "fusername_1" + "uid": "fuid_1", #Date(14)_RandomChars(32) + "username": "fusername_1" #Random chars 8 }, "msg": "操作成功", - "time": 1547211900690 - } - + "time": bumper.current_milli_time() + } - elif "/getAuthCode?" in str(self.path): + elif "/user/getAuthCode?" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("getAuthCode Path Split: %s" %psplit) body = { "code": "0000", "data": { - "authCode": "temp_authcode", - "ecovacsUid": "fuid_1" + "authCode": "{}_tempauthcode".format(psplit[3]), #countrycode_randomchars(32) + "ecovacsUid": "fuid_1" #Date(14)_RandomChars(32) }, "msg": "操作成功", - "time": 1547211900808 - } + "time": bumper.current_milli_time() + } - elif "/checkVersion?" in str(self.path): + elif "/common/checkVersion?" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("checkVersion Path Split: %s" %psplit) body = { "code": "0000", "data": { @@ -115,16 +153,52 @@ class RequestHandler(BaseHTTPRequestHandler): "v": None }, "msg": "操作成功", - "time": 1548829850462 + "time": bumper.current_milli_time() } - elif "/logout?" in str(self.path): - body = {"code": "0000","data": None,"msg": "操作成功","time": 1548830041460} + + + elif "/user/checkAgreement?" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("checkAgreement Path Split: %s" %psplit) + body = { + "code": "0000", + "data": [], + "msg": "操作成功", + "time": bumper.current_milli_time() + + } + elif "/campaign/homePageAlert?" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("homePageAlert Path Split: %s" %psplit) + nextAlert = bumper.get_milli_time((datetime.now() + timedelta(hours=12)).timestamp()) + logging.debug("Next Alert %s" % nextAlert) + body = { + "code": "0000", + "data": { + "clickSchemeUrl": None, + "clickWebUrl": None, + "hasCampaign": "N", + "imageUrl": None, + "nextAlertTime": nextAlert, + "serverTime": bumper.current_milli_time() + }, + "msg": "操作成功", + "time": bumper.current_milli_time() + } + + + elif "/user/logout?" in str(self.path): + psplit = str(self.path).split("/") + logging.debug("Logout Path Split: %s" %psplit) + body = {"code": "0000","data": None,"msg": "操作成功", "time": bumper.current_milli_time()} else: + psplit = str(self.path).split("/") + logging.debug("Other Get Path Split: %s" %psplit) body = {} - body = json.dumps(body) - logging.debug("Response: " + body) - body = body.encode() + body = json.dumps(body) + logging.debug("Response: " + str(body)) + body = body.encode(encoding='UTF-8') self.send_response(HTTPStatus.OK) self.send_header('Content-Type', 'application/json; charset=utf-8') self.send_header('Connection', 'keep-alive') @@ -135,7 +209,7 @@ class RequestHandler(BaseHTTPRequestHandler): logging.error('ConfServer GET: {}'.format(e)) -class HTTPServerThread(HTTPServer, Thread): +class HTTPServerThread(ThreadedHTTPServer, Thread): bumper_clients = contextvars.ContextVar def __init__(self, server_address, bumper_clients, helperbot): Thread.__init__(self) @@ -148,7 +222,7 @@ class HTTPServerThread(HTTPServer, Thread): self.exit_flag = False - HTTPServer.__init__(self, self.server_address, self.handler) + ThreadedHTTPServer.__init__(self, self.server_address, self.handler) def handle_error(self, request, client_address): self.close_request(request) diff --git a/bumper/mqttserver.py b/bumper/mqttserver.py index 5c52c57..3a1f6d1 100644 --- a/bumper/mqttserver.py +++ b/bumper/mqttserver.py @@ -9,12 +9,13 @@ import hbmqtt import pkg_resources import contextvars import time -import bumper from threading import Thread import ssl from paho.mqtt.client import Client as ClientMQTT from paho.mqtt import publish as MQTTPublish from paho.mqtt import subscribe as MQTTSubscribe +import bumper +import json class BumperMQTTPlugin: @@ -79,7 +80,7 @@ class MQTTHelperBot(ClientMQTT): def run_helperbot(self, loop): formatter = "[%(asctime)s] :: %(levelname)s :: %(name)s :: %(message)s" - logging.basicConfig(level=logging.DEBUG, format=formatter) + logging.basicConfig(level=logging.INFO, format=formatter) asyncio.set_event_loop(loop) loop.run_until_complete(self.start_helper_bot()) loop.run_forever() @@ -116,8 +117,9 @@ class MQTTHelperBot(ClientMQTT): def get_msg(self, client, userdata, message): logging.debug("HelperBot MQTT Received Message on Topic: {} - Message: {}".format(message.topic, str(message.payload.decode("utf-8")))) - print(str(message.payload.decode("utf-8"))) + logging.debug(str(message.payload.decode("utf-8"))) cresp = self.command_responses.get() + #str(message.payload.decode("utf-8") cresp.append({"topic": message.topic,"payload":str(message.payload.decode("utf-8"))}) self.command_responses.set(cresp) @@ -131,10 +133,15 @@ class MQTTHelperBot(ClientMQTT): topic = str(msg['topic']).split("/") if (topic[6] == "helper1" and topic[10] == requestid): logging.debug('Vac Responses MQTT: Topic: %s Payload: %s' % (msg['topic'], msg['payload'])) + if topic[11] == "j": + resppayload = json.loads(msg['payload']) + else: + resppayload = str(msg['payload']) + logging.debug("Resp Payload: %s" % resppayload) resp = { "id": requestid, "ret": "ok", - "resp": msg['payload'] + "resp": resppayload } cresp = self.command_responses.get() cresp.remove(msg) @@ -146,12 +153,12 @@ class MQTTHelperBot(ClientMQTT): def send_command(self, cmdjson, requestid): ttopic = "iot/p2p/{}/helper1/bumper/helper1/{}/{}/{}/q/{}/{}".format(cmdjson["cmdName"], cmdjson["toId"], cmdjson["toType"], cmdjson["toRes"], requestid, cmdjson["payloadType"]) - self.publish(ttopic, cmdjson["payload"]) + self.publish(ttopic, str(cmdjson["payload"])) loop = asyncio.new_event_loop() resp = loop.run_until_complete(self.wait_for_resp(requestid)) - print(resp) + logging.debug(resp) return resp @@ -231,7 +238,7 @@ class MQTTServer(): def run_server(self, loop): formatter = "[%(asctime)s] :: %(levelname)s :: %(name)s :: %(message)s" - logging.basicConfig(level=logging.DEBUG, format=formatter) + logging.basicConfig(level=logging.INFO, format=formatter) asyncio.set_event_loop(loop) loop.run_until_complete(self.broker_coro()) #loop.run_until_complete(self.active_bot_listing()) diff --git a/bumper/xmppserver.py b/bumper/xmppserver.py index c6f5a6e..6be00d8 100644 --- a/bumper/xmppserver.py +++ b/bumper/xmppserver.py @@ -125,7 +125,8 @@ class Client(threading.Thread): logging.info('client connected: {}'.format(self.address)) self._set_state('CONNECT') while True: - data = self.connection.recv(4096) + if not self.connection._closed: + data = self.connection.recv(4096) if data: logging.debug('from {}: {}'.format(self.address, data.decode('utf-8'))) try: @@ -174,6 +175,9 @@ class Client(threading.Thread): except Exception as e: logging.error('XMPPServer: {}'.format(e)) self._set_state('DISCONNECT') + except OSError as e: + logging.error('XMPPServer: {}'.format(e)) + self._set_state('DISCONNECT') except Exception as e: logging.error('XMPPServer: {}'.format(e)) self._set_state('DISCONNECT') diff --git a/certs/CA/cacert.pem b/certs/CA/cacert.pem new file mode 100644 index 0000000..a219c22 --- /dev/null +++ b/certs/CA/cacert.pem @@ -0,0 +1,85 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 11078087720677522868 (0x99bd46167599bdb4) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=California, O=Bumper, OU=Bumper, CN=Bumper + Validity + Not Before: Feb 1 05:59:32 2019 GMT + Not After : Jan 29 05:59:32 2029 GMT + Subject: C=US, ST=California, O=Bumper, OU=Bumper, CN=Bumper + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:aa:6e:af:15:99:3b:09:32:a1:a7:4b:ee:f7:13: + 68:c1:94:4f:09:71:54:99:02:2d:27:c1:5f:16:2e: + 45:d3:a6:44:24:fb:bd:f0:9b:a9:f6:6c:49:6f:09: + 13:76:d6:5b:88:c2:fc:8b:8b:14:4c:39:df:8a:b5: + 51:a8:83:c1:73:ca:aa:f1:b7:b4:38:e1:f0:91:35: + be:6f:c6:99:7c:e1:ef:d9:c0:ee:d5:fb:f8:f5:0f: + a7:96:b3:78:95:d6:2a:04:7d:3b:31:42:b6:33:c0: + 36:2c:06:f1:6d:db:11:99:16:3e:77:c6:c6:df:ed: + 95:40:b8:39:a2:82:40:fe:bb:f6:8b:63:0c:c6:96: + ae:fd:3b:c7:79:a4:f5:5f:4e:83:87:27:33:bb:6f: + cf:43:86:55:73:6c:0c:28:61:89:66:72:b3:90:3d: + d8:54:53:6a:3a:57:76:01:05:58:ac:78:3d:0d:0a: + 52:b4:b7:be:2b:4e:9a:6a:f4:f8:a2:3f:21:99:b6: + b4:74:fb:d5:c0:23:7b:e8:51:f5:0a:ec:6a:11:4e: + 9b:c3:f2:56:00:06:3b:58:e3:cf:67:b6:c3:26:50: + 0e:f7:72:11:3f:39:2c:c9:b7:d5:69:1a:33:dc:8f: + 81:66:c5:88:3f:c7:01:94:f0:3d:ac:aa:f3:a0:2a: + e8:c7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 5E:39:C7:78:31:83:30:51:82:D9:88:9B:73:0B:72:EF:44:74:7B:D5 + X509v3 Authority Key Identifier: + keyid:5E:39:C7:78:31:83:30:51:82:D9:88:9B:73:0B:72:EF:44:74:7B:D5 + DirName:/C=US/ST=California/O=Bumper/OU=Bumper/CN=Bumper + serial:99:BD:46:16:75:99:BD:B4 + + X509v3 Basic Constraints: + CA:TRUE + X509v3 Subject Alternative Name: + email:null@null.com + Signature Algorithm: sha1WithRSAEncryption + 5e:45:c7:34:7f:9b:a4:6b:cc:3c:e7:34:84:76:ee:ec:98:be: + 0f:de:ab:b2:a5:6d:59:18:eb:20:de:a4:fc:2c:4d:e4:9a:9c: + 63:99:be:16:6a:1d:c0:57:73:e8:7f:9e:78:4d:2a:e6:11:a3: + b6:57:18:84:6e:ae:a7:97:08:7e:1f:4d:33:fc:46:06:a7:d1: + 6e:3a:d1:d9:ef:ba:fd:87:b8:e0:ea:51:85:d2:a6:de:49:e1: + a6:43:d1:26:15:e2:f9:8b:8c:f0:94:fe:a3:62:dd:cc:ab:be: + a5:dc:90:d8:28:0c:85:4b:fb:df:4a:f1:ac:35:86:7f:63:fd: + ca:c6:aa:29:0b:b0:e1:e3:08:e6:4c:71:d2:08:32:c9:09:22: + 6c:61:ec:87:49:8d:77:48:7a:f7:75:86:bb:4e:17:b0:fe:43: + 4d:2f:95:bd:d5:0f:c1:ef:ba:f7:3e:e0:b6:2f:fa:4a:c9:45: + 36:97:56:a4:6d:af:86:88:ff:98:2f:b2:e4:04:4d:c4:02:20: + fc:66:8c:d5:2b:e9:5a:6c:1f:d2:67:34:c3:39:7e:f4:c7:37: + 53:6b:11:99:a8:29:8b:3f:f6:3a:82:ae:f5:2c:d5:b7:23:88: + bb:03:84:ad:cb:d0:f6:8d:24:9f:54:08:d1:39:da:1a:a9:f6: + 1b:c9:53:65 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIJAJm9RhZ1mb20MA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNV +BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMQ8wDQYDVQQKEwZCdW1wZXIxDzAN +BgNVBAsTBkJ1bXBlcjEPMA0GA1UEAxMGQnVtcGVyMB4XDTE5MDIwMTA1NTkzMloX +DTI5MDEyOTA1NTkzMlowVTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju +aWExDzANBgNVBAoTBkJ1bXBlcjEPMA0GA1UECxMGQnVtcGVyMQ8wDQYDVQQDEwZC +dW1wZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqbq8VmTsJMqGn +S+73E2jBlE8JcVSZAi0nwV8WLkXTpkQk+73wm6n2bElvCRN21luIwvyLixRMOd+K +tVGog8Fzyqrxt7Q44fCRNb5vxpl84e/ZwO7V+/j1D6eWs3iV1ioEfTsxQrYzwDYs +BvFt2xGZFj53xsbf7ZVAuDmigkD+u/aLYwzGlq79O8d5pPVfToOHJzO7b89DhlVz +bAwoYYlmcrOQPdhUU2o6V3YBBViseD0NClK0t74rTppq9PiiPyGZtrR0+9XAI3vo +UfUK7GoRTpvD8lYABjtY489ntsMmUA73chE/OSzJt9VpGjPcj4FmxYg/xwGU8D2s +qvOgKujHAgMBAAGjgdIwgc8wHQYDVR0OBBYEFF45x3gxgzBRgtmIm3MLcu9EdHvV +MIGFBgNVHSMEfjB8gBReOcd4MYMwUYLZiJtzC3LvRHR71aFZpFcwVTELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExDzANBgNVBAoTBkJ1bXBlcjEPMA0G +A1UECxMGQnVtcGVyMQ8wDQYDVQQDEwZCdW1wZXKCCQCZvUYWdZm9tDAMBgNVHRME +BTADAQH/MBgGA1UdEQQRMA+BDW51bGxAbnVsbC5jb20wDQYJKoZIhvcNAQEFBQAD +ggEBAF5FxzR/m6RrzDznNIR27uyYvg/eq7KlbVkY6yDepPwsTeSanGOZvhZqHcBX +c+h/nnhNKuYRo7ZXGIRurqeXCH4fTTP8Rgan0W460dnvuv2HuODqUYXSpt5J4aZD +0SYV4vmLjPCU/qNi3cyrvqXckNgoDIVL+99K8aw1hn9j/crGqikLsOHjCOZMcdII +MskJImxh7IdJjXdIevd1hrtOF7D+Q00vlb3VD8Hvuvc+4LYv+krJRTaXVqRtr4aI +/5gvsuQETcQCIPxmjNUr6VpsH9JnNMM5fvTHN1NrEZmoKYs/9jqCrvUs1bcjiLsD +hK3L0PaNJJ9UCNE52hqp9hvJU2U= +-----END CERTIFICATE----- diff --git a/certs/CA/careq.pem b/certs/CA/careq.pem new file mode 100644 index 0000000..f4c94e5 --- /dev/null +++ b/certs/CA/careq.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIC2TCCAcECAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWEx +EjAQBgNVBAcTCUhhd3Rob3JuZTEPMA0GA1UEChMGQnVtcGVyMQ8wDQYDVQQLEwZC +dW1wZXIxDzANBgNVBAMTBkJ1bXBlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKpurxWZOwkyoadL7vcTaMGUTwlxVJkCLSfBXxYuRdOmRCT7vfCbqfZs +SW8JE3bWW4jC/IuLFEw534q1UaiDwXPKqvG3tDjh8JE1vm/GmXzh79nA7tX7+PUP +p5azeJXWKgR9OzFCtjPANiwG8W3bEZkWPnfGxt/tlUC4OaKCQP679otjDMaWrv07 +x3mk9V9Og4cnM7tvz0OGVXNsDChhiWZys5A92FRTajpXdgEFWKx4PQ0KUrS3vitO +mmr0+KI/IZm2tHT71cAje+hR9QrsahFOm8PyVgAGO1jjz2e2wyZQDvdyET85LMm3 +1WkaM9yPgWbFiD/HAZTwPayq86Aq6McCAwEAAaArMCkGCSqGSIb3DQEJDjEcMBow +GAYDVR0RBBEwD4ENbnVsbEBudWxsLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAQU/v +8GRj5M3Qs0at2UGxz7uKZF5RKt6hE5WreS/joaMkK4+kTqA8FsfCGz0zUyyLWNKh +1o4b99yvYXG+rP8euMyBql/WSnEcF0KYrrGyUjH0qQQfTHqC0UqolvqoQCkPbvUO +sWZVzHeVxIH3nNtXgkIS+PHvTIhDLA3CxrDSe5jz4XLaACPoK/dawojAd0Qet0zZ +GfXk9Vm/5D0k/7MPkstOTAFCvfln2cdoYhA34WNkPW+uZNGBEdXTN3Tg/Oj8qAqV +RdIXR8joIzgAJnCit1IDyTPHR88UNTlFtk4AJ9Ott4v1hmUOf3kBqB0owXj+fCpq +3Mz7yL1DioePr8h7iw== +-----END CERTIFICATE REQUEST----- diff --git a/certs/CA/certreqs/bumper_req.txt b/certs/CA/certreqs/bumper_req.txt new file mode 100644 index 0000000..f59043e --- /dev/null +++ b/certs/CA/certreqs/bumper_req.txt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIC0DCCAbgCAQAwETEPMA0GA1UEAwwGQnVtcGVyMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA0eEqslnaJcbhqTalVMQTNT8/s6957rLSw78cZSVQEISN +MwyS4Q5tYYJzXXEmqyp8rBMWAArfWGaPO8sgKs6rC9UcYurVr1GbxtsVdRRRI/fg +tt2rtWQYdkBI7Dz9vjkcUF1tWwydWzPtKunzHGq9XNWY8NvJ4eq5dnO1oF1wyPWe +5bbKURJpA3gOXuCtEY+TOv++8PK3vdPQnkE1pFRnTfBP5rmatnReFlbfxCUCwcnq +X5a0+BeDanw4GSm4m0MCFXGWEb07P+8JUdUP+2rbMIZwUb42BBz/UKBeg410vgwh +PISyQetW4XGn3bLJk933GFO6gvOU9CVdzPdxRPPLPQIDAQABoHoweAYJKoZIhvcN +AQkOMWswaTAOBgNVHQ8BAf8EBAMCBaAwIAYDVR0lAQH/BBYwFAYIKwYBBQUHAwEG +CCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwJwYDVR0RBCAwHoINKi5lY291c2VyLm5l +dIINKi5lY292YWNzLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAloHqI4fjQEL0H0I0 +TMr+DemH5GhYyVC7hs5bPfajqUbrQdTMvfUhfcUm0JgAmicKlAvVe1+75grkXeCF +sfGBl10f5dbO9CEHBT9kzDJWhFT/ZFzGlblAwB6Kad7QGpIMKncJCZBUwkE4zrwO +wEI1hAo0zvJr/SETte4YO9JianzT1Tu5f3nVgvKYVM+XJ0KZ7ReIdrT0Ev95mZhB +tmZ1R7WeYtO8yZXVHP28uOHZcHCKgKcnrpb13yuNd6mkR643xMoirwp9t7xayJAt +RnQgvb9o8HXNZoO1whr4ZF8gNs0MQGnT72MoV5E2KSZ9HMO4nQlzj9wIiEMls+ss +UTUhBg== +-----END CERTIFICATE REQUEST----- + diff --git a/certs/CA/certsdb/99BD46167599BDB4.pem b/certs/CA/certsdb/99BD46167599BDB4.pem new file mode 100644 index 0000000..a219c22 --- /dev/null +++ b/certs/CA/certsdb/99BD46167599BDB4.pem @@ -0,0 +1,85 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 11078087720677522868 (0x99bd46167599bdb4) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=California, O=Bumper, OU=Bumper, CN=Bumper + Validity + Not Before: Feb 1 05:59:32 2019 GMT + Not After : Jan 29 05:59:32 2029 GMT + Subject: C=US, ST=California, O=Bumper, OU=Bumper, CN=Bumper + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:aa:6e:af:15:99:3b:09:32:a1:a7:4b:ee:f7:13: + 68:c1:94:4f:09:71:54:99:02:2d:27:c1:5f:16:2e: + 45:d3:a6:44:24:fb:bd:f0:9b:a9:f6:6c:49:6f:09: + 13:76:d6:5b:88:c2:fc:8b:8b:14:4c:39:df:8a:b5: + 51:a8:83:c1:73:ca:aa:f1:b7:b4:38:e1:f0:91:35: + be:6f:c6:99:7c:e1:ef:d9:c0:ee:d5:fb:f8:f5:0f: + a7:96:b3:78:95:d6:2a:04:7d:3b:31:42:b6:33:c0: + 36:2c:06:f1:6d:db:11:99:16:3e:77:c6:c6:df:ed: + 95:40:b8:39:a2:82:40:fe:bb:f6:8b:63:0c:c6:96: + ae:fd:3b:c7:79:a4:f5:5f:4e:83:87:27:33:bb:6f: + cf:43:86:55:73:6c:0c:28:61:89:66:72:b3:90:3d: + d8:54:53:6a:3a:57:76:01:05:58:ac:78:3d:0d:0a: + 52:b4:b7:be:2b:4e:9a:6a:f4:f8:a2:3f:21:99:b6: + b4:74:fb:d5:c0:23:7b:e8:51:f5:0a:ec:6a:11:4e: + 9b:c3:f2:56:00:06:3b:58:e3:cf:67:b6:c3:26:50: + 0e:f7:72:11:3f:39:2c:c9:b7:d5:69:1a:33:dc:8f: + 81:66:c5:88:3f:c7:01:94:f0:3d:ac:aa:f3:a0:2a: + e8:c7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 5E:39:C7:78:31:83:30:51:82:D9:88:9B:73:0B:72:EF:44:74:7B:D5 + X509v3 Authority Key Identifier: + keyid:5E:39:C7:78:31:83:30:51:82:D9:88:9B:73:0B:72:EF:44:74:7B:D5 + DirName:/C=US/ST=California/O=Bumper/OU=Bumper/CN=Bumper + serial:99:BD:46:16:75:99:BD:B4 + + X509v3 Basic Constraints: + CA:TRUE + X509v3 Subject Alternative Name: + email:null@null.com + Signature Algorithm: sha1WithRSAEncryption + 5e:45:c7:34:7f:9b:a4:6b:cc:3c:e7:34:84:76:ee:ec:98:be: + 0f:de:ab:b2:a5:6d:59:18:eb:20:de:a4:fc:2c:4d:e4:9a:9c: + 63:99:be:16:6a:1d:c0:57:73:e8:7f:9e:78:4d:2a:e6:11:a3: + b6:57:18:84:6e:ae:a7:97:08:7e:1f:4d:33:fc:46:06:a7:d1: + 6e:3a:d1:d9:ef:ba:fd:87:b8:e0:ea:51:85:d2:a6:de:49:e1: + a6:43:d1:26:15:e2:f9:8b:8c:f0:94:fe:a3:62:dd:cc:ab:be: + a5:dc:90:d8:28:0c:85:4b:fb:df:4a:f1:ac:35:86:7f:63:fd: + ca:c6:aa:29:0b:b0:e1:e3:08:e6:4c:71:d2:08:32:c9:09:22: + 6c:61:ec:87:49:8d:77:48:7a:f7:75:86:bb:4e:17:b0:fe:43: + 4d:2f:95:bd:d5:0f:c1:ef:ba:f7:3e:e0:b6:2f:fa:4a:c9:45: + 36:97:56:a4:6d:af:86:88:ff:98:2f:b2:e4:04:4d:c4:02:20: + fc:66:8c:d5:2b:e9:5a:6c:1f:d2:67:34:c3:39:7e:f4:c7:37: + 53:6b:11:99:a8:29:8b:3f:f6:3a:82:ae:f5:2c:d5:b7:23:88: + bb:03:84:ad:cb:d0:f6:8d:24:9f:54:08:d1:39:da:1a:a9:f6: + 1b:c9:53:65 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIJAJm9RhZ1mb20MA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNV +BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMQ8wDQYDVQQKEwZCdW1wZXIxDzAN +BgNVBAsTBkJ1bXBlcjEPMA0GA1UEAxMGQnVtcGVyMB4XDTE5MDIwMTA1NTkzMloX +DTI5MDEyOTA1NTkzMlowVTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju +aWExDzANBgNVBAoTBkJ1bXBlcjEPMA0GA1UECxMGQnVtcGVyMQ8wDQYDVQQDEwZC +dW1wZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqbq8VmTsJMqGn +S+73E2jBlE8JcVSZAi0nwV8WLkXTpkQk+73wm6n2bElvCRN21luIwvyLixRMOd+K +tVGog8Fzyqrxt7Q44fCRNb5vxpl84e/ZwO7V+/j1D6eWs3iV1ioEfTsxQrYzwDYs +BvFt2xGZFj53xsbf7ZVAuDmigkD+u/aLYwzGlq79O8d5pPVfToOHJzO7b89DhlVz +bAwoYYlmcrOQPdhUU2o6V3YBBViseD0NClK0t74rTppq9PiiPyGZtrR0+9XAI3vo +UfUK7GoRTpvD8lYABjtY489ntsMmUA73chE/OSzJt9VpGjPcj4FmxYg/xwGU8D2s +qvOgKujHAgMBAAGjgdIwgc8wHQYDVR0OBBYEFF45x3gxgzBRgtmIm3MLcu9EdHvV +MIGFBgNVHSMEfjB8gBReOcd4MYMwUYLZiJtzC3LvRHR71aFZpFcwVTELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExDzANBgNVBAoTBkJ1bXBlcjEPMA0G +A1UECxMGQnVtcGVyMQ8wDQYDVQQDEwZCdW1wZXKCCQCZvUYWdZm9tDAMBgNVHRME +BTADAQH/MBgGA1UdEQQRMA+BDW51bGxAbnVsbC5jb20wDQYJKoZIhvcNAQEFBQAD +ggEBAF5FxzR/m6RrzDznNIR27uyYvg/eq7KlbVkY6yDepPwsTeSanGOZvhZqHcBX +c+h/nnhNKuYRo7ZXGIRurqeXCH4fTTP8Rgan0W460dnvuv2HuODqUYXSpt5J4aZD +0SYV4vmLjPCU/qNi3cyrvqXckNgoDIVL+99K8aw1hn9j/crGqikLsOHjCOZMcdII +MskJImxh7IdJjXdIevd1hrtOF7D+Q00vlb3VD8Hvuvc+4LYv+krJRTaXVqRtr4aI +/5gvsuQETcQCIPxmjNUr6VpsH9JnNMM5fvTHN1NrEZmoKYs/9jqCrvUs1bcjiLsD +hK3L0PaNJJ9UCNE52hqp9hvJU2U= +-----END CERTIFICATE----- diff --git a/certs/CA/certsdb/99BD46167599BDB5.pem b/certs/CA/certsdb/99BD46167599BDB5.pem new file mode 100644 index 0000000..64ccbbf --- /dev/null +++ b/certs/CA/certsdb/99BD46167599BDB5.pem @@ -0,0 +1,85 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 11078087720677522869 (0x99bd46167599bdb5) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=California, O=Bumper, OU=Bumper, CN=Bumper + Validity + Not Before: Feb 1 06:17:18 2019 GMT + Not After : Jan 29 06:17:18 2029 GMT + Subject: CN=Bumper + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:d1:e1:2a:b2:59:da:25:c6:e1:a9:36:a5:54:c4: + 13:35:3f:3f:b3:af:79:ee:b2:d2:c3:bf:1c:65:25: + 50:10:84:8d:33:0c:92:e1:0e:6d:61:82:73:5d:71: + 26:ab:2a:7c:ac:13:16:00:0a:df:58:66:8f:3b:cb: + 20:2a:ce:ab:0b:d5:1c:62:ea:d5:af:51:9b:c6:db: + 15:75:14:51:23:f7:e0:b6:dd:ab:b5:64:18:76:40: + 48:ec:3c:fd:be:39:1c:50:5d:6d:5b:0c:9d:5b:33: + ed:2a:e9:f3:1c:6a:bd:5c:d5:98:f0:db:c9:e1:ea: + b9:76:73:b5:a0:5d:70:c8:f5:9e:e5:b6:ca:51:12: + 69:03:78:0e:5e:e0:ad:11:8f:93:3a:ff:be:f0:f2: + b7:bd:d3:d0:9e:41:35:a4:54:67:4d:f0:4f:e6:b9: + 9a:b6:74:5e:16:56:df:c4:25:02:c1:c9:ea:5f:96: + b4:f8:17:83:6a:7c:38:19:29:b8:9b:43:02:15:71: + 96:11:bd:3b:3f:ef:09:51:d5:0f:fb:6a:db:30:86: + 70:51:be:36:04:1c:ff:50:a0:5e:83:8d:74:be:0c: + 21:3c:84:b2:41:eb:56:e1:71:a7:dd:b2:c9:93:dd: + f7:18:53:ba:82:f3:94:f4:25:5d:cc:f7:71:44:f3: + cb:3d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + 26:7E:4F:14:80:43:9E:EF:64:C2:61:6E:81:68:4B:6A:F2:4E:B5:40 + X509v3 Authority Key Identifier: + keyid:5E:39:C7:78:31:83:30:51:82:D9:88:9B:73:0B:72:EF:44:74:7B:D5 + + X509v3 Subject Alternative Name: + DNS:*.ecouser.net, DNS:*.ecovacs.com + X509v3 Key Usage: critical + Digital Signature, Key Encipherment + X509v3 Extended Key Usage: critical + TLS Web Server Authentication, TLS Web Client Authentication + Signature Algorithm: sha1WithRSAEncryption + 89:11:41:18:ac:22:0d:4a:08:31:ee:18:d4:cf:88:02:93:f0: + ef:53:f5:86:e1:b2:16:0e:8d:87:f9:e9:29:7a:aa:95:4e:d7: + 89:96:ac:1c:9a:19:8c:84:62:41:7a:b8:8c:46:07:8f:56:ae: + 18:31:52:cb:60:3f:01:57:4d:65:d6:5f:95:da:bc:c1:53:35: + fa:cc:c6:49:aa:fe:35:d3:05:15:2c:bd:9b:ac:f0:36:d7:71: + bc:ed:3e:f9:ac:c8:84:58:5e:f0:02:02:47:9c:0f:f3:f6:06: + 35:4d:3b:69:2f:bb:81:cd:ae:61:84:75:97:b1:c2:e7:e1:74: + 18:61:bc:c0:6b:2e:4d:f6:61:0d:36:72:3d:e2:ef:ef:e5:cf: + 7a:17:af:d6:7c:d2:a4:88:ca:b3:4e:27:7e:f3:da:96:33:ef: + 12:12:02:5a:31:70:82:e9:b6:e4:a9:57:d7:a4:b3:f6:3f:ea: + fa:63:6a:e6:b7:26:73:bb:c1:87:4e:e2:13:40:65:b9:04:3c: + c9:95:d7:8e:07:6f:9d:af:d2:36:ee:aa:5d:e5:f9:bb:cc:47: + 9c:ce:62:cf:28:2e:a3:58:8b:63:a2:e3:c3:f4:b0:69:98:aa: + 84:ff:a5:c2:52:8b:e8:b4:5c:2c:67:ef:63:b3:5c:42:95:6d: + 6b:d7:5b:11 +-----BEGIN CERTIFICATE----- +MIIDkzCCAnugAwIBAgIJAJm9RhZ1mb21MA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNV +BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMQ8wDQYDVQQKEwZCdW1wZXIxDzAN +BgNVBAsTBkJ1bXBlcjEPMA0GA1UEAxMGQnVtcGVyMB4XDTE5MDIwMTA2MTcxOFoX +DTI5MDEyOTA2MTcxOFowETEPMA0GA1UEAwwGQnVtcGVyMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA0eEqslnaJcbhqTalVMQTNT8/s6957rLSw78cZSVQ +EISNMwyS4Q5tYYJzXXEmqyp8rBMWAArfWGaPO8sgKs6rC9UcYurVr1GbxtsVdRRR +I/fgtt2rtWQYdkBI7Dz9vjkcUF1tWwydWzPtKunzHGq9XNWY8NvJ4eq5dnO1oF1w +yPWe5bbKURJpA3gOXuCtEY+TOv++8PK3vdPQnkE1pFRnTfBP5rmatnReFlbfxCUC +wcnqX5a0+BeDanw4GSm4m0MCFXGWEb07P+8JUdUP+2rbMIZwUb42BBz/UKBeg410 +vgwhPISyQetW4XGn3bLJk933GFO6gvOU9CVdzPdxRPPLPQIDAQABo4GpMIGmMAkG +A1UdEwQCMAAwHQYDVR0OBBYEFCZ+TxSAQ57vZMJhboFoS2ryTrVAMB8GA1UdIwQY +MBaAFF45x3gxgzBRgtmIm3MLcu9EdHvVMCcGA1UdEQQgMB6CDSouZWNvdXNlci5u +ZXSCDSouZWNvdmFjcy5jb20wDgYDVR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQG +CCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOCAQEAiRFBGKwiDUoI +Me4Y1M+IApPw71P1huGyFg6Nh/npKXqqlU7XiZasHJoZjIRiQXq4jEYHj1auGDFS +y2A/AVdNZdZfldq8wVM1+szGSar+NdMFFSy9m6zwNtdxvO0++azIhFhe8AICR5wP +8/YGNU07aS+7gc2uYYR1l7HC5+F0GGG8wGsuTfZhDTZyPeLv7+XPehev1nzSpIjK +s04nfvPaljPvEhICWjFwgum25KlX16Sz9j/q+mNq5rcmc7vBh07iE0BluQQ8yZXX +jgdvna/SNu6qXeX5u8xHnM5izyguo1iLY6Ljw/SwaZiqhP+lwlKL6LRcLGfvY7Nc +QpVta9dbEQ== +-----END CERTIFICATE----- diff --git a/certs/CA/index.txt b/certs/CA/index.txt new file mode 100644 index 0000000..613826e --- /dev/null +++ b/certs/CA/index.txt @@ -0,0 +1,2 @@ +V 290129055932Z 99BD46167599BDB4 unknown /C=US/ST=California/O=Bumper/OU=Bumper/CN=Bumper +V 290129061718Z 99BD46167599BDB5 unknown /CN=Bumper diff --git a/certs/CA/index.txt.attr b/certs/CA/index.txt.attr new file mode 100644 index 0000000..8f7e63a --- /dev/null +++ b/certs/CA/index.txt.attr @@ -0,0 +1 @@ +unique_subject = yes diff --git a/certs/CA/index.txt.attr.old b/certs/CA/index.txt.attr.old new file mode 100644 index 0000000..8f7e63a --- /dev/null +++ b/certs/CA/index.txt.attr.old @@ -0,0 +1 @@ +unique_subject = yes diff --git a/certs/CA/index.txt.old b/certs/CA/index.txt.old new file mode 100644 index 0000000..de82fa9 --- /dev/null +++ b/certs/CA/index.txt.old @@ -0,0 +1 @@ +V 290129055932Z 99BD46167599BDB4 unknown /C=US/ST=California/O=Bumper/OU=Bumper/CN=Bumper diff --git a/certs/CA/openssl.cnf b/certs/CA/openssl.cnf new file mode 100644 index 0000000..77bb39a --- /dev/null +++ b/certs/CA/openssl.cnf @@ -0,0 +1,180 @@ +HOME = . +RANDFILE = $ENV::HOME/.rnd + +#################################################################### +# CA Definition +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +# Per the above, this is where we define CA values +[ CA_default ] + +dir = . # Where everything is kept +certs = $dir/certsdb # Where the issued certs are kept +new_certs_dir = $certs # default place for new certs. +database = $dir/index.txt # database index file. +certificate = $dir/cacert.pem # The CA certificate +private_key = $dir/private/cakey.pem# The private key +serial = $dir/serial # The current serial number +RANDFILE = $dir/private/.rand # private random number file + +crldir = $dir/crl +crlnumber = $dir/crlnumber # the current crl number +crl = $crldir/crl.pem # The current CRL + +# By default we use "user certificate" extensions when signing +x509_extensions = usr_cert # The extentions to add to the cert + +# Honor extensions requested of us +copy_extensions = copy + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +#crl_extensions = crl_ext +default_days = 3650 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = sha1 # which md to use. +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_anything + +#################################################################### +# The default policy for the CA when signing requests, requires some +# resemblence to the CA cert +# +[ policy_match ] +countryName = match # Must be the same as the CA +stateOrProvinceName = match # Must be the same as the CA +organizationName = match # Must be the same as the CA +organizationalUnitName = optional # not required +commonName = supplied # must be there, whatever it is +emailAddress = optional # not required + +#################################################################### +# An alternative policy not referred to anywhere in this file. Can +# be used by specifying '-policy policy_anything' to ca(8). +# +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +# This is where we define how to generate CSRs +[ req ] +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name # where to get DN for reqs +attributes = req_attributes # req attributes +x509_extensions = v3_ca # The extentions to add to self signed certs +req_extensions = v3_req # The extensions to add to req's +prompt = no + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString. +# utf8only: only UTF8Strings. +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings +# so use this option with caution! +string_mask = nombstr + + +#################################################################### +# Per "req" section, this is where we define DN info +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = US +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = California + +localityName = Locality Name (eg, city) +localityName_default = Hawthorne + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = PhilNet + +organizationalUnitName = Organizational Unit Name (eg, section) + +commonName = Common Name (eg, YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + + +#################################################################### +# We don't want these, but the section must exist +[ req_attributes ] +#challengePassword = A challenge password +#challengePassword_min = 4 +#challengePassword_max = 20 +#unstructuredName = An optional company name + + + +#################################################################### +[ v3_req ] +keyUsage=critical,digitalSignature,keyEncipherment +extendedKeyUsage=critical,serverAuth,clientAuth +basicConstraints=critical,CA:false +subjectAltName = @alt_names +[ alt_names ] +DNS.0 = *.ecouser.net +DNS.1 = *.ecovacs.com + +#################################################################### +# Extensions for when we sign normal certs (specified as default) +[ usr_cert ] +basicConstraints = CA:false +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +subjectAltName = @alt_names +[ alt_names ] +DNS.0 = *.ecouser.net +DNS.1 = *.ecovacs.com + +#################################################################### +# Same as above, but cert req already has SubjectAltName +[ usr_cert_has_san ] +basicConstraints = CA:false +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +subjectAltName = @alt_names +[ alt_names ] +DNS.0 = *.ecouser.net +DNS.1 = *.ecovacs.com + +#################################################################### +# Extensions to use when signing a CA +[ v3_ca ] +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer:always +basicConstraints = CA:true +subjectAltName=email:move + +#################################################################### +# Same as above, but CA req already has SubjectAltName +[ v3_ca_has_san ] +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer:always +basicConstraints = CA:true + diff --git a/certs/CA/private/cakey.pem b/certs/CA/private/cakey.pem new file mode 100644 index 0000000..fd39a20 --- /dev/null +++ b/certs/CA/private/cakey.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIzLScD02ODzQCAggA +MB0GCWCGSAFlAwQBKgQQzjzZ8LiXuLxb/Rx75kGXkwSCBNAmHUh4RTgy1bJmwZN7 +uyb4gGHtY9+ZvKZikibq7LpiwmDAwjjwguJz/HRsquq8fsZDpB+rV4hD4lB3lHuj +jqETzKst5qLTgP0cC9BS0S0P9f0/L7MEcwtiBkds6dVs4Ot6IDr4napC+6wQCBfr +ISrTN8+ls9IVghiS1eOrarFTy2ZxkXFM6PJczLd15/pbTm91etLWl1vnPCJn3MTc +vUvneAChKFiwaX4Cbx8bhQP11OBBNshM1zANSoGAdijRpvRCGfeOIvgLsbBl9N0d ++lV6iJR0TzOr4GquBDXor/y2Mofn6wYRwtSLRUgHgAxy1USosWVuXwrtGO4htPoR +aGt8V3h4XQ90VGAh6ez43/nmkVDgIj8VU9qZ+skCz7Y4TxPZYXUIcnG14KFj9lsk +r+uV6HmHyBKSlSkAE+D9uukQb71oIW83tsSn6I4ulcWaax6VsOS5n/Jrhf9V+Nz0 +e0CjrOJeLUSd2vTiyz03ho32nIrsGFeNDHhFmKzXNynjcW3z6Mx9/dSjqPHn8wFn +0dcVkq0GAZ+L8woNyDhr4e7Hhy6FEDhRX9bWz7FlswnBzym2AzU/zhagDrP2MIQ9 +o/cjAp3AoX70IIF7kIha8OXG4ew4tHpQIAj9E5SG5uEeD6gVTg7HB93dH+NEeLNR +F65wzQHPhf+V2zR7qlpCg3gqzyE9mvvTN/DMAJwASXWXK37ITIjcXhErH/2shHSK +jRwYuQiAWuhPrAr04EUoeHQFM6EAKDqBsFRr+/Ot34DqhAwAOlmkyCM/mw7IDl73 +pX/Ey9CQc2u2PS0zqYkDIzWE1Osek3FIF6JHSzaiRYODjaE6v15FLe7hZ56x6NMI +EDzpScp6HwMg6jsudbONrz3KwvXE6j4+yWpp8tgkZzwsIfnOMtWSrGgX4Oz9Y0Ep +jZ1yKDLQBjKZor2z4FBNze74tEnzJdBl59mQoN3ffFWHRlnkOhAZ+HsaXoIKB6AZ +3NPzlgGhOmtza6HKAwlseMgjpNH7EmeTLplr5nUlEMwwJ2+i8VGS4J9458vipcBm +50MbqaR8N8jAsanxyAbBF7gLPzsezN9Kzus99B6uB2nZIgZIsOeCeBLEZGzz9bUv +AiI3rM38nFkkKeHjJwqcYsO6LiLxdstnaHSveE7d6ugmN3+bNaZ+QCUDFlfELr4M +n5Eiwv3+hlCL8UBubacdQypfYvYI/z8rTdH+5eTVxBjeTCG0QmjDlYiuHcycL+q3 +iE3WxQ0yGpeJL6V985Ej/0SHkudTI49T5o+jcp6HFNS7xQelBGndpXGq9Xyc+OV/ +c+1zYWxz/sMFAbMkCF2pMMLfKL5EBkLBCpOdxHtWFt9JMxuhRfl3YzN81xSV1m0A +FtURjPUSwGqI7QFPl4R4MA1+0AdveZYprGo2nSUQpSoCW9WHl8U8tLIUNtew1MPA +v19h5DSqJ3tj+pPdxmFixoG+hBNk8FO1lJvH6P2an6lYVTlZ3/uDU5/DHTUTHuen +9x8FY3LQDQZA65QEnN092cUxXWw6cha+xXvwrwZGZiWXtuMBh/mfa4apxQ5+KY0N +/RCbIBctvLgijuC+xQw8GqBcG5L7urCOhnyZCXspWW7+loI7uZ0EfpNi7jY8BmAs +3S3MwMwwp+uvloikg3ZTUJmx/g== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/certs/CA/private/key.pem b/certs/CA/private/key.pem new file mode 100644 index 0000000..f3ece38 --- /dev/null +++ b/certs/CA/private/key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR4SqyWdolxuGp +NqVUxBM1Pz+zr3nustLDvxxlJVAQhI0zDJLhDm1hgnNdcSarKnysExYACt9YZo87 +yyAqzqsL1Rxi6tWvUZvG2xV1FFEj9+C23au1ZBh2QEjsPP2+ORxQXW1bDJ1bM+0q +6fMcar1c1Zjw28nh6rl2c7WgXXDI9Z7ltspREmkDeA5e4K0Rj5M6/77w8re909Ce +QTWkVGdN8E/muZq2dF4WVt/EJQLByepflrT4F4NqfDgZKbibQwIVcZYRvTs/7wlR +1Q/7atswhnBRvjYEHP9QoF6DjXS+DCE8hLJB61bhcafdssmT3fcYU7qC85T0JV3M +93FE88s9AgMBAAECggEBAJ4N3aOWeuv8DDDsUDG3v2dYDFb7DO4viP2UzIN3SAZI +bDVHgM0vmjvWi56Q+bfpNR44+VZq2auvAKrc24qhPLqacNglVWrEIHXuwwf6luhp +YbcU1JyzlqBm5QPTIpvAUoxK73Gj3FS0lCS/Li/2SkjBKn4oZq5Vn/mORfdQpwEO +aY5YzNNCzCwbqL/XcwvN1XRpF9puhBb+o2TtfGPLBf5LiScJWxrtPM7q+dFG/Ef7 +f9L28iX+W6e3lD0/d93XEtlh1IsaZTWkl4m01Etg0f2FFtcja38eG+Yys4YNSpPe +VUWtFL2eDX+u5wv7nbaG9GsZmithXL6xa0PdwOd0KAECgYEA/D7K2KcxS+HeBgcG +V3b0m6QH1bRbqRxzK22TKnCVLAlRW7+5bfK56sHqMrOnDp/PuyAdq93roeJBNnAg +DrUt9i/lFTZ2kSBTJIlKW7cHv2Hocw3sQSDY/PhAXtALULxa8NHadPGsntHQDLzq +TVUNhOU6+GqPcqTp8BeSy+XrGD0CgYEA1QDvbxh/5tQxCFXcKn5KQCpJhbCfKBSW +drd8YF3Gdpxt3d2vTFTOsQ3xyAvEhSV0Jy9WUXobmx+KK8OjZqsR4PoYpYN3IWIW +N9jBKE9bahPRFF3g3FxaeVrCBkZBVK+ZAv/E5gshCyCXOmgHT+Kgi1Xpb4X0J/Pj +T83O7y/DrwECgYEAlagfq4kOy2m307WpQo12NT2N1HIMi/owLoz1apGfP6BLn/bR +anU/bxQcAnbqX9fbZLd6QzUIj2Rwsn611mQSX+Ussng8wn/+NEgsUNv4AclyI4kY +Kc/2TahwcJBYlk8aWZT4WrfkZdov6M7Q6I7U1Ys3gJmggDFuBp/F3amM4TUCgYBv +IofKvUuukjPrF3FCMpZnGCk4Ockwzl0bH+0jEoqERGYGhq35853MP2xRZeJpXftW +npo49K8GptQetXrCDKvNaHAHm6pCnrzc8pkFgTI/DIvgRoMWNpF2E+Z8A5f+qYf6 +SpzfMhtRhPWiobh+8820JWUgrRGQ7u1BLC62GYPOAQKBgG/rt2Xu42DJcQ/wm7wN +LB8zn54G/rKWq+mXQbenpr1lN4zBOGgZILrRb1HTcQ7a19056BHBmx3J52yQAnGH +cxuhOyppsH3WgUkUqYN4bzO1CJorX3cP9udBAcmN4BWLF7pLgT7zHrLkJg05sWnd +UHWm2y7vdXeTvdD381p0Ug0S +-----END PRIVATE KEY----- diff --git a/certs/CA/serial b/certs/CA/serial new file mode 100644 index 0000000..3bf84d2 --- /dev/null +++ b/certs/CA/serial @@ -0,0 +1 @@ +99BD46167599BDB6 diff --git a/certs/CA/serial.old b/certs/CA/serial.old new file mode 100644 index 0000000..9d0f0bc --- /dev/null +++ b/certs/CA/serial.old @@ -0,0 +1 @@ +99BD46167599BDB5 diff --git a/certs/cert.pem b/certs/cert.pem index 87925f8..64ccbbf 100644 --- a/certs/cert.pem +++ b/certs/cert.pem @@ -1,33 +1,85 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 11078087720677522869 (0x99bd46167599bdb5) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=California, O=Bumper, OU=Bumper, CN=Bumper + Validity + Not Before: Feb 1 06:17:18 2019 GMT + Not After : Jan 29 06:17:18 2029 GMT + Subject: CN=Bumper + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:d1:e1:2a:b2:59:da:25:c6:e1:a9:36:a5:54:c4: + 13:35:3f:3f:b3:af:79:ee:b2:d2:c3:bf:1c:65:25: + 50:10:84:8d:33:0c:92:e1:0e:6d:61:82:73:5d:71: + 26:ab:2a:7c:ac:13:16:00:0a:df:58:66:8f:3b:cb: + 20:2a:ce:ab:0b:d5:1c:62:ea:d5:af:51:9b:c6:db: + 15:75:14:51:23:f7:e0:b6:dd:ab:b5:64:18:76:40: + 48:ec:3c:fd:be:39:1c:50:5d:6d:5b:0c:9d:5b:33: + ed:2a:e9:f3:1c:6a:bd:5c:d5:98:f0:db:c9:e1:ea: + b9:76:73:b5:a0:5d:70:c8:f5:9e:e5:b6:ca:51:12: + 69:03:78:0e:5e:e0:ad:11:8f:93:3a:ff:be:f0:f2: + b7:bd:d3:d0:9e:41:35:a4:54:67:4d:f0:4f:e6:b9: + 9a:b6:74:5e:16:56:df:c4:25:02:c1:c9:ea:5f:96: + b4:f8:17:83:6a:7c:38:19:29:b8:9b:43:02:15:71: + 96:11:bd:3b:3f:ef:09:51:d5:0f:fb:6a:db:30:86: + 70:51:be:36:04:1c:ff:50:a0:5e:83:8d:74:be:0c: + 21:3c:84:b2:41:eb:56:e1:71:a7:dd:b2:c9:93:dd: + f7:18:53:ba:82:f3:94:f4:25:5d:cc:f7:71:44:f3: + cb:3d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + 26:7E:4F:14:80:43:9E:EF:64:C2:61:6E:81:68:4B:6A:F2:4E:B5:40 + X509v3 Authority Key Identifier: + keyid:5E:39:C7:78:31:83:30:51:82:D9:88:9B:73:0B:72:EF:44:74:7B:D5 + + X509v3 Subject Alternative Name: + DNS:*.ecouser.net, DNS:*.ecovacs.com + X509v3 Key Usage: critical + Digital Signature, Key Encipherment + X509v3 Extended Key Usage: critical + TLS Web Server Authentication, TLS Web Client Authentication + Signature Algorithm: sha1WithRSAEncryption + 89:11:41:18:ac:22:0d:4a:08:31:ee:18:d4:cf:88:02:93:f0: + ef:53:f5:86:e1:b2:16:0e:8d:87:f9:e9:29:7a:aa:95:4e:d7: + 89:96:ac:1c:9a:19:8c:84:62:41:7a:b8:8c:46:07:8f:56:ae: + 18:31:52:cb:60:3f:01:57:4d:65:d6:5f:95:da:bc:c1:53:35: + fa:cc:c6:49:aa:fe:35:d3:05:15:2c:bd:9b:ac:f0:36:d7:71: + bc:ed:3e:f9:ac:c8:84:58:5e:f0:02:02:47:9c:0f:f3:f6:06: + 35:4d:3b:69:2f:bb:81:cd:ae:61:84:75:97:b1:c2:e7:e1:74: + 18:61:bc:c0:6b:2e:4d:f6:61:0d:36:72:3d:e2:ef:ef:e5:cf: + 7a:17:af:d6:7c:d2:a4:88:ca:b3:4e:27:7e:f3:da:96:33:ef: + 12:12:02:5a:31:70:82:e9:b6:e4:a9:57:d7:a4:b3:f6:3f:ea: + fa:63:6a:e6:b7:26:73:bb:c1:87:4e:e2:13:40:65:b9:04:3c: + c9:95:d7:8e:07:6f:9d:af:d2:36:ee:aa:5d:e5:f9:bb:cc:47: + 9c:ce:62:cf:28:2e:a3:58:8b:63:a2:e3:c3:f4:b0:69:98:aa: + 84:ff:a5:c2:52:8b:e8:b4:5c:2c:67:ef:63:b3:5c:42:95:6d: + 6b:d7:5b:11 -----BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIJAKLG5udzkR+zMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQwHhcNMTcxMjA1MTkxNTQwWhcNMTgxMjA1MTkxNTQwWjBF -MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 -ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAu1z0Iw7KLJZD8CBrZWm9Jp7eqIAqdoTn3GWmNmzgIDnzmxZb70War74d -7aWDVtEVtOZQ8ShW15zRanr6hQkHdM5Li1KTMYW3P7TOmzJZkESNEZviOyvlfRPG -oLLbPIp+A7W8Zz3ST0cDzyy6N7LRAA0OywRgPhrxrN637Fx1+SFwqKQg0IUOuX3v -veZ1oAZSBUDzpDPUaak7jXugB11wt6XTEekwOcrH7WEDoFH87thtJyCM7IidW0bM -rkqxeiM18qMzn8cGqnm2nY+VHgK0t0/QZ/cftPVc2IHZLr/+eTGaJmPv7gL+7v/l -7fgk3RMTn0GrdTO+Vvnu1qNK7r+//KMgGOo6zwEQAI9Ml6y1LRuEXrymgsYY9qCE -ZtBV0FoZaVYAuGG4cvCDLLPgM2OivIcWgG+77MqMH/RkWg+BrUesn7ISEpF+7Q7+ -jc6pFYr4y5fc2jJ9/c5Mxu6sv0Tc8N/c9WpcXsJ6Y1JrBbDcdGSwmTZ1JVyiog9O -6bU/16QTuU3w2oH9qjnc907tZuB66P53WJ2iHPvB8yF5V93FvtbPYsHpO7noURSI -LqvKoNy31ndv4kao2AIzrJuhBBkSorBEcoFerRRBJMHa85R5Tb6iuGg6RFv0BB8K -gv6mG/7oqmR8QDnRRd54U2pEsIkYmgoIU4/8L91r9Vd1eiEDEnsCAwEAAaOBpzCB -pDAdBgNVHQ4EFgQUqA/GBsZAepFIcbgw6gK/HTUWolswdQYDVR0jBG4wbIAUqA/G -BsZAepFIcbgw6gK/HTUWoluhSaRHMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpT -b21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGSCCQCi -xubnc5EfszAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4ICAQB7kHEHKNDQ -TcvwY9z3RscpHyWwjrGjUdjk8AkM9cTm/sT8G7JU/7+KZueu4elNOc4hir/+DMlO -/AN6IXRNrfPO8IVG6hKnK9K3wvceJzg6mT8F4peg4vMNdIsrZyQaPhWArUF7LG/Q -HF4Yk8jnw3NKIG5fnlagAGFDdDGSdDK/IQN+JA6sHJVQRrBLpksRUCWFY7QJGYVS -DmEAYr6Y6emftbflUjW6iC/E57lC5F7bQyoIEIBBHKjMaNTdM8TzOUZSOGLwAuVD -C1iAoZn7VWeGa4h/xwx0yio0yeI6gRh3fINBKoCNv6pLUm6sgrW8oqGMDJiH0T3H -sc8xC3bK2DPO4sIyisL3HUPcsSFB/hf0i8BOQrihrpZEn/fx4lTRyQYSKT5NVSl4 -v/9hmDjWIXh9EInGfP8DdWp4Og8GiXcV9rUqvRBo5aBwqK/aTNRCk6ah5N958yFu -wHlrbQmPnw1AqJSG1oG+4dcXnrcgd/xGMAarTbgzqsd8icafg8v2x2pG5ZexE3uN -0METK9hvCrjN8/Rvo2ViTDa8WF4CXMuVFG4FdbeRrYPZl1j1jBYDMtKkVJJCsVQd -chYbqKgNDmMcbfpksBtF3XpYTtVNAKA9g5mrAhEJS88uy63PStLoBQNXv9y8ksql -VVCTFNGy5JRyvOeSRYSSdXjKbfj5Vgh1HQ== +MIIDkzCCAnugAwIBAgIJAJm9RhZ1mb21MA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNV +BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMQ8wDQYDVQQKEwZCdW1wZXIxDzAN +BgNVBAsTBkJ1bXBlcjEPMA0GA1UEAxMGQnVtcGVyMB4XDTE5MDIwMTA2MTcxOFoX +DTI5MDEyOTA2MTcxOFowETEPMA0GA1UEAwwGQnVtcGVyMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA0eEqslnaJcbhqTalVMQTNT8/s6957rLSw78cZSVQ +EISNMwyS4Q5tYYJzXXEmqyp8rBMWAArfWGaPO8sgKs6rC9UcYurVr1GbxtsVdRRR +I/fgtt2rtWQYdkBI7Dz9vjkcUF1tWwydWzPtKunzHGq9XNWY8NvJ4eq5dnO1oF1w +yPWe5bbKURJpA3gOXuCtEY+TOv++8PK3vdPQnkE1pFRnTfBP5rmatnReFlbfxCUC +wcnqX5a0+BeDanw4GSm4m0MCFXGWEb07P+8JUdUP+2rbMIZwUb42BBz/UKBeg410 +vgwhPISyQetW4XGn3bLJk933GFO6gvOU9CVdzPdxRPPLPQIDAQABo4GpMIGmMAkG +A1UdEwQCMAAwHQYDVR0OBBYEFCZ+TxSAQ57vZMJhboFoS2ryTrVAMB8GA1UdIwQY +MBaAFF45x3gxgzBRgtmIm3MLcu9EdHvVMCcGA1UdEQQgMB6CDSouZWNvdXNlci5u +ZXSCDSouZWNvdmFjcy5jb20wDgYDVR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQG +CCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOCAQEAiRFBGKwiDUoI +Me4Y1M+IApPw71P1huGyFg6Nh/npKXqqlU7XiZasHJoZjIRiQXq4jEYHj1auGDFS +y2A/AVdNZdZfldq8wVM1+szGSar+NdMFFSy9m6zwNtdxvO0++azIhFhe8AICR5wP +8/YGNU07aS+7gc2uYYR1l7HC5+F0GGG8wGsuTfZhDTZyPeLv7+XPehev1nzSpIjK +s04nfvPaljPvEhICWjFwgum25KlX16Sz9j/q+mNq5rcmc7vBh07iE0BluQQ8yZXX +jgdvna/SNu6qXeX5u8xHnM5izyguo1iLY6Ljw/SwaZiqhP+lwlKL6LRcLGfvY7Nc +QpVta9dbEQ== -----END CERTIFICATE----- diff --git a/certs/cert.pem.bak b/certs/cert.pem.bak new file mode 100644 index 0000000..87925f8 --- /dev/null +++ b/certs/cert.pem.bak @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIJAKLG5udzkR+zMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQwHhcNMTcxMjA1MTkxNTQwWhcNMTgxMjA1MTkxNTQwWjBF +MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 +ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAu1z0Iw7KLJZD8CBrZWm9Jp7eqIAqdoTn3GWmNmzgIDnzmxZb70War74d +7aWDVtEVtOZQ8ShW15zRanr6hQkHdM5Li1KTMYW3P7TOmzJZkESNEZviOyvlfRPG +oLLbPIp+A7W8Zz3ST0cDzyy6N7LRAA0OywRgPhrxrN637Fx1+SFwqKQg0IUOuX3v +veZ1oAZSBUDzpDPUaak7jXugB11wt6XTEekwOcrH7WEDoFH87thtJyCM7IidW0bM +rkqxeiM18qMzn8cGqnm2nY+VHgK0t0/QZ/cftPVc2IHZLr/+eTGaJmPv7gL+7v/l +7fgk3RMTn0GrdTO+Vvnu1qNK7r+//KMgGOo6zwEQAI9Ml6y1LRuEXrymgsYY9qCE +ZtBV0FoZaVYAuGG4cvCDLLPgM2OivIcWgG+77MqMH/RkWg+BrUesn7ISEpF+7Q7+ +jc6pFYr4y5fc2jJ9/c5Mxu6sv0Tc8N/c9WpcXsJ6Y1JrBbDcdGSwmTZ1JVyiog9O +6bU/16QTuU3w2oH9qjnc907tZuB66P53WJ2iHPvB8yF5V93FvtbPYsHpO7noURSI +LqvKoNy31ndv4kao2AIzrJuhBBkSorBEcoFerRRBJMHa85R5Tb6iuGg6RFv0BB8K +gv6mG/7oqmR8QDnRRd54U2pEsIkYmgoIU4/8L91r9Vd1eiEDEnsCAwEAAaOBpzCB +pDAdBgNVHQ4EFgQUqA/GBsZAepFIcbgw6gK/HTUWolswdQYDVR0jBG4wbIAUqA/G +BsZAepFIcbgw6gK/HTUWoluhSaRHMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpT +b21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGSCCQCi +xubnc5EfszAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4ICAQB7kHEHKNDQ +TcvwY9z3RscpHyWwjrGjUdjk8AkM9cTm/sT8G7JU/7+KZueu4elNOc4hir/+DMlO +/AN6IXRNrfPO8IVG6hKnK9K3wvceJzg6mT8F4peg4vMNdIsrZyQaPhWArUF7LG/Q +HF4Yk8jnw3NKIG5fnlagAGFDdDGSdDK/IQN+JA6sHJVQRrBLpksRUCWFY7QJGYVS +DmEAYr6Y6emftbflUjW6iC/E57lC5F7bQyoIEIBBHKjMaNTdM8TzOUZSOGLwAuVD +C1iAoZn7VWeGa4h/xwx0yio0yeI6gRh3fINBKoCNv6pLUm6sgrW8oqGMDJiH0T3H +sc8xC3bK2DPO4sIyisL3HUPcsSFB/hf0i8BOQrihrpZEn/fx4lTRyQYSKT5NVSl4 +v/9hmDjWIXh9EInGfP8DdWp4Og8GiXcV9rUqvRBo5aBwqK/aTNRCk6ah5N958yFu +wHlrbQmPnw1AqJSG1oG+4dcXnrcgd/xGMAarTbgzqsd8icafg8v2x2pG5ZexE3uN +0METK9hvCrjN8/Rvo2ViTDa8WF4CXMuVFG4FdbeRrYPZl1j1jBYDMtKkVJJCsVQd +chYbqKgNDmMcbfpksBtF3XpYTtVNAKA9g5mrAhEJS88uy63PStLoBQNXv9y8ksql +VVCTFNGy5JRyvOeSRYSSdXjKbfj5Vgh1HQ== +-----END CERTIFICATE----- diff --git a/certs/key.pem b/certs/key.pem index 852040d..f3ece38 100644 --- a/certs/key.pem +++ b/certs/key.pem @@ -1,51 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR4SqyWdolxuGp +NqVUxBM1Pz+zr3nustLDvxxlJVAQhI0zDJLhDm1hgnNdcSarKnysExYACt9YZo87 +yyAqzqsL1Rxi6tWvUZvG2xV1FFEj9+C23au1ZBh2QEjsPP2+ORxQXW1bDJ1bM+0q +6fMcar1c1Zjw28nh6rl2c7WgXXDI9Z7ltspREmkDeA5e4K0Rj5M6/77w8re909Ce +QTWkVGdN8E/muZq2dF4WVt/EJQLByepflrT4F4NqfDgZKbibQwIVcZYRvTs/7wlR +1Q/7atswhnBRvjYEHP9QoF6DjXS+DCE8hLJB61bhcafdssmT3fcYU7qC85T0JV3M +93FE88s9AgMBAAECggEBAJ4N3aOWeuv8DDDsUDG3v2dYDFb7DO4viP2UzIN3SAZI +bDVHgM0vmjvWi56Q+bfpNR44+VZq2auvAKrc24qhPLqacNglVWrEIHXuwwf6luhp +YbcU1JyzlqBm5QPTIpvAUoxK73Gj3FS0lCS/Li/2SkjBKn4oZq5Vn/mORfdQpwEO +aY5YzNNCzCwbqL/XcwvN1XRpF9puhBb+o2TtfGPLBf5LiScJWxrtPM7q+dFG/Ef7 +f9L28iX+W6e3lD0/d93XEtlh1IsaZTWkl4m01Etg0f2FFtcja38eG+Yys4YNSpPe +VUWtFL2eDX+u5wv7nbaG9GsZmithXL6xa0PdwOd0KAECgYEA/D7K2KcxS+HeBgcG +V3b0m6QH1bRbqRxzK22TKnCVLAlRW7+5bfK56sHqMrOnDp/PuyAdq93roeJBNnAg +DrUt9i/lFTZ2kSBTJIlKW7cHv2Hocw3sQSDY/PhAXtALULxa8NHadPGsntHQDLzq +TVUNhOU6+GqPcqTp8BeSy+XrGD0CgYEA1QDvbxh/5tQxCFXcKn5KQCpJhbCfKBSW +drd8YF3Gdpxt3d2vTFTOsQ3xyAvEhSV0Jy9WUXobmx+KK8OjZqsR4PoYpYN3IWIW +N9jBKE9bahPRFF3g3FxaeVrCBkZBVK+ZAv/E5gshCyCXOmgHT+Kgi1Xpb4X0J/Pj +T83O7y/DrwECgYEAlagfq4kOy2m307WpQo12NT2N1HIMi/owLoz1apGfP6BLn/bR +anU/bxQcAnbqX9fbZLd6QzUIj2Rwsn611mQSX+Ussng8wn/+NEgsUNv4AclyI4kY +Kc/2TahwcJBYlk8aWZT4WrfkZdov6M7Q6I7U1Ys3gJmggDFuBp/F3amM4TUCgYBv +IofKvUuukjPrF3FCMpZnGCk4Ockwzl0bH+0jEoqERGYGhq35853MP2xRZeJpXftW +npo49K8GptQetXrCDKvNaHAHm6pCnrzc8pkFgTI/DIvgRoMWNpF2E+Z8A5f+qYf6 +SpzfMhtRhPWiobh+8820JWUgrRGQ7u1BLC62GYPOAQKBgG/rt2Xu42DJcQ/wm7wN +LB8zn54G/rKWq+mXQbenpr1lN4zBOGgZILrRb1HTcQ7a19056BHBmx3J52yQAnGH +cxuhOyppsH3WgUkUqYN4bzO1CJorX3cP9udBAcmN4BWLF7pLgT7zHrLkJg05sWnd +UHWm2y7vdXeTvdD381p0Ug0S +-----END PRIVATE KEY----- diff --git a/certs/key.pem.bak b/certs/key.pem.bak new file mode 100644 index 0000000..852040d --- /dev/null +++ b/certs/key.pem.bak @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY-----