diff --git a/.gitignore b/.gitignore
index 6a929076a..86909aa52 100644
--- a/.gitignore
+++ b/.gitignore
@@ -118,3 +118,4 @@ data/json/config.json
data/site.pl
data/admin_path.pl
data/close.pl
+ssl/input.pl
diff --git a/class/core/config_api.py b/class/core/config_api.py
index 74c37dc5a..b36e33488 100755
--- a/class/core/config_api.py
+++ b/class/core/config_api.py
@@ -144,12 +144,93 @@ class config_api:
public.execShell("chown root.root " + filename)
return public.returnJson(True, '面板已关闭!')
+ def setIpv6StatusApi(self):
+ ipv6_file = 'data/ipv6.pl'
+ if os.path.exists('data/ipv6.pl'):
+ os.remove(ipv6_file)
+ public.writeLog('面板设置', '关闭面板IPv6兼容!')
+ else:
+ public.writeFile(ipv6_file, 'True')
+ public.writeLog('面板设置', '开启面板IPv6兼容!')
+ public.restartMw()
+ return public.returnJson(True, '设置成功!')
+
+ # 获取面板证书
+ def getPanelSslApi(self):
+ cert = {}
+ cert['privateKey'] = public.readFile('ssl/privateKey.pem')
+ cert['certPem'] = public.readFile('ssl/certificate.pem')
+ cert['rep'] = os.path.exists('ssl/input.pl')
+ return public.getJson(cert)
+
+ # 保存面板证书
+ def savePanelSslApi(self):
+ keyPath = 'ssl/privateKey.pem'
+ certPath = 'ssl/certificate.pem'
+ checkCert = '/tmp/cert.pl'
+
+ certPem = request.form.get('certPem', '').strip()
+ privateKey = request.form.get('privateKey', '').strip()
+
+ public.writeFile(checkCert, certPem)
+ if privateKey:
+ public.writeFile(keyPath, privateKey)
+ if certPem:
+ public.writeFile(certPath, certPem)
+ if not public.checkCert(checkCert):
+ return public.returnJson(False, '证书错误,请检查!')
+ public.writeFile('ssl/input.pl', 'True')
+ return public.returnJson(True, '证书已保存!')
+
+ # 设置面板SSL
+ def setPanelSslApi(self):
+ sslConf = public.getRunDir() + '/data/ssl.pl'
+ if os.path.exists(sslConf):
+ os.system('rm -f ' + sslConf)
+ return public.returnJson(True, 'SSL已关闭,请使用http协议访问面板!')
+ else:
+ os.system('pip install cffi==1.10')
+ os.system('pip install cryptography==2.1')
+ os.system('pip install pyOpenSSL==16.2')
+ try:
+ if not self.createSSL():
+ return public.returnJson(False, '开启失败,无法自动安装pyOpenSSL组件!
请尝试手动安装: pip install pyOpenSSL
')
+ public.writeFile(sslConf, 'True')
+ except Exception as ex:
+ return public.returnJson(False, '开启失败,无法自动安装pyOpenSSL组件!请尝试手动安装: pip install pyOpenSSL
')
+ return public.returnJson(True, '开启成功,请使用https协议访问面板!')
+
def getApi(self):
data = {}
-
return public.getJson(data)
##### ----- end ----- ###
+ # 自签证书
+ def createSSL(self):
+ if os.path.exists('ssl/input.pl'):
+ return True
+ import OpenSSL
+ key = OpenSSL.crypto.PKey()
+ key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
+ cert = OpenSSL.crypto.X509()
+ cert.set_serial_number(0)
+ cert.get_subject().CN = '120.27.27.98'
+ cert.set_issuer(cert.get_subject())
+ cert.gmtime_adj_notBefore(0)
+ cert.gmtime_adj_notAfter(86400 * 3650)
+ cert.set_pubkey(key)
+ cert.sign(key, 'md5')
+ cert_ca = OpenSSL.crypto.dump_certificate(
+ OpenSSL.crypto.FILETYPE_PEM, cert)
+ private_key = OpenSSL.crypto.dump_privatekey(
+ OpenSSL.crypto.FILETYPE_PEM, key)
+ if len(cert_ca) > 100 and len(private_key) > 100:
+ public.writeFile('ssl/certificate.pem', cert_ca)
+ public.writeFile('ssl/privateKey.pem', private_key)
+ print cert_ca, private_key
+ return True
+ return False
+
def getVersion(self):
return self.__version
@@ -171,6 +252,18 @@ class config_api:
else:
data['admin_path'] = public.readFile(admin_path_file)
+ ipv6_file = 'data/ipv6.pl'
+ if os.path.exists('data/ipv6.pl'):
+ data['ipv6'] = 'checked'
+ else:
+ data['ipv6'] = ''
+
+ ssl_file = 'data/ssl.pl'
+ if os.path.exists('data/ssl.pl'):
+ data['ssl'] = 'checked'
+ else:
+ data['ssl'] = ''
+
data['username'] = public.M('users').where(
"id=?", (1,)).getField('username')
diff --git a/data/ssl.pl b/data/ssl.pl
new file mode 100644
index 000000000..4791ed555
--- /dev/null
+++ b/data/ssl.pl
@@ -0,0 +1 @@
+True
\ No newline at end of file
diff --git a/route/__init__.py b/route/__init__.py
index ca9cb3f10..baa50b15a 100755
--- a/route/__init__.py
+++ b/route/__init__.py
@@ -191,10 +191,9 @@ def doLogin():
@app.route('/', methods=['POST', 'GET'])
@app.route('/', methods=['POST', 'GET'])
def index(reqClass=None, reqAction=None, reqData=None):
- # comReturn = common.local()
- # print comReturn
- # if comReturn:
- # return comReturn
+ comReturn = common.local()
+ if comReturn:
+ return comReturn
if (reqClass == None):
reqClass = 'index'
diff --git a/route/static/app/config.js b/route/static/app/config.js
index b26357f58..d7f717366 100755
--- a/route/static/app/config.js
+++ b/route/static/app/config.js
@@ -1,7 +1,7 @@
-$.post('/config/get','',function(rdata){
- console.log(rdata);
-},'json');
+// $.post('/config/get','',function(rdata){
+// console.log(rdata);
+// },'json');
$(".set-submit").click(function(){
@@ -199,8 +199,117 @@ function syncDate(){
$.post('/config/sync_date','',function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
- setTimeout(function(){
- window.location.reload();
- },1500);
+ setTimeout(function(){window.location.reload();},1500);
},'json');
-}
\ No newline at end of file
+}
+
+
+function setIPv6() {
+ var loadT = layer.msg('正在配置,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] });
+ $.post('/config/set_ipv6_status', {}, function (rdata) {
+ layer.close(loadT);
+ layer.msg(rdata.msg, {icon:rdata.status?1:2});
+ setTimeout(function(){window.location.reload();},1500);
+ },'json');
+}
+
+
+//设置面板SSL
+function setPanelSSL(){
+ var status = $("#sshswitch").prop("checked")==true?1:0;
+ var msg = $("#panelSSL").attr('checked')?'关闭SSL后,必需使用http协议访问面板,继续吗?':'危险!此功能不懂别开启!\
+ 必须要用到且了解此功能才决定自己是否要开启!\
+ 面板SSL是自签证书,不被浏览器信任,显示不安全是正常现象\
+ 开启后导致面板不能访问,可以点击下面链接了解解决方法\
+ \
+ \
+ 了解详情\
+
';
+ layer.confirm(msg,{title:'设置面板SSL',closeBtn:2,icon:3,area:'550px',cancel:function(){
+ if(status == 0){
+ $("#panelSSL").prop("checked",false);
+ }
+ else{
+ $("#panelSSL").prop("checked",true);
+ }
+ }},function(){
+ if(window.location.protocol.indexOf('https') == -1){
+ if(!$("#checkSSL").prop('checked')){
+ layer.msg(lan.config.ssl_ps,{icon:2});
+ return false;
+ }
+ }
+ var loadT = layer.msg('正在安装并设置SSL组件,这需要几分钟时间...',{icon:16,time:0,shade: [0.3, '#000']});
+ $.post('/config/set_panel_ssl','',function(rdata){
+ layer.close(loadT);
+ layer.msg(rdata.msg,{icon:rdata.status?1:5});
+ if(rdata.status === true){
+ $.post('/system/restart','',function (rdata) {
+ layer.close(loadT);
+ layer.msg(rdata.msg);
+ setTimeout(function(){
+ window.location.href = ((window.location.protocol.indexOf('https') != -1)?'http://':'https://') + window.location.host + window.location.pathname;
+ },3000);
+ },'json');
+ }
+ },'json');
+ },function(){
+ if(status == 0){
+ $("#panelSSL").prop("checked",false);
+ }
+ else{
+ $("#panelSSL").prop("checked",true);
+ }
+ });
+}
+
+
+function getPanelSSL(){
+ var loadT = layer.msg('正在获取证书信息...',{icon:16,time:0,shade: [0.3, '#000']});
+ $.post('/config/get_panel_ssl',{},function(cert){
+ layer.close(loadT);
+ var certBody = '\
+
\
+
密钥(KEY)
\
+ \
+
\
+
证书(PEM格式)
\
+ \
+
\
+
\
+ \
+
\
+
\
+
\
+ - 粘贴您的*.key以及*.pem内容,然后保存即可[帮助]。
\
+ - 如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书
- PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt
\
+
\
+
'
+ layer.open({
+ type: 1,
+ area: "600px",
+ title: '自定义面板证书',
+ closeBtn: 2,
+ shift: 5,
+ shadeClose: false,
+ content:certBody
+ });
+ },'json');
+}
+
+
+function savePanelSSL(){
+ var data = {
+ privateKey:$("#key").val(),
+ certPem:$("#csr").val()
+ }
+ var loadT = layer.msg('正在安装并设置SSL组件,这需要几分钟时间...',{icon:16,time:0,shade: [0.3, '#000']});
+ $.post('/config/save_panel_ssl',data,function(rdata){
+ layer.close(loadT);
+ if(rdata.status){
+ layer.closeAll();
+ }
+ layer.msg(rdata.msg,{icon:rdata.status?1:2});
+ },'json');
+}
+
diff --git a/route/templates/default/config.html b/route/templates/default/config.html
index 080db90f2..5f7e5d7aa 100755
--- a/route/templates/default/config.html
+++ b/route/templates/default/config.html
@@ -19,9 +19,17 @@
-
面板SSL
+
监听IPv6
+
+
+
+
+
+
+
diff --git a/ssl/certificate.pem b/ssl/certificate.pem
index 61d641a6d..18b916271 100755
--- a/ssl/certificate.pem
+++ b/ssl/certificate.pem
@@ -1,64 +1,17 @@
-----BEGIN CERTIFICATE-----
-MIIFyjCCBLKgAwIBAgIQJTAtADozzDddEtBm8iuvEzANBgkqhkiG9w0BAQsFADCB
-lzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs
-IEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT
-FERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM
-IENBIC0gRzUwHhcNMTcwODEyMDAwMDAwWhcNMTgwODEyMjM1OTU5WjAfMR0wGwYD
-VQQDDBRhbXcwMDI2MDE0MTRmcy5idC5jbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAOG/FLVtHXI5SPllMUkCgk/BOfOC8qLCthuutDh95+zH1MmtNtkq
-SsSbl4+ODXnhZ+kL+vuDpm4rwKA86tRP+AShIxk2FaK37bGdiEU+RvQkuMK+Wqr5
-NLNzOPJihvxxgRYP24qdn0aRW6ihFqRqrLZeNmX7APvq1815F5YcHXS8PRb8KTKo
-GU7i4o4S6KvEsvDUfGc6d2hAzuTUoLGQr+tGWESL+Q6qNl46Whdlz9an6Kl1S9IE
-T4zkPZgzZn4o5yKvpBe7N3CUYuE4kqUV1oVuikJya0gEJQgTt7cavPWGA/xUrVFK
-x3SV1wE+GLKvkQJ9Ap7ssLSO0s44qiOYDyMCAwEAAaOCAocwggKDMB8GA1UdEQQY
-MBaCFGFtdzAwMjYwMTQxNGZzLmJ0LmNuMAkGA1UdEwQCMAAwYQYDVR0gBFowWDBW
-BgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMw
-JQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgw
-FoAUbVjHfxrn4T8upoyXNUK79NM4rD8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW
-MBQGCCsGAQUFBwMBBggrBgEFBQcDAjCBmwYIKwYBBQUHAQEEgY4wgYswPAYIKwYB
-BQUHMAGGMGh0dHA6Ly90cnVzdGFzaWEyLW9jc3AuZGlnaXRhbGNlcnR2YWxpZGF0
-aW9uLmNvbTBLBggrBgEFBQcwAoY/aHR0cDovL3RydXN0YXNpYTItYWlhLmRpZ2l0
-YWxjZXJ0dmFsaWRhdGlvbi5jb20vdHJ1c3Rhc2lhZzUuY3J0MIIBAgYKKwYBBAHW
-eQIEAgSB8wSB8ADuAHUA3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswA
-AAFd1CGINQAABAMARjBEAiA5wfZjgU0lC7GpY92MIkfh0UcnWvzthnKZ26mQk8NT
-uQIgHyM5oBCkiQMokVBnKO802YIOup0kUOhhsPlWU4K7PSAAdQCkuQmQtBhYFIe7
-E6LMZ3AKPDWYBPkb37jjd80OyA3cEAAAAV3UIYh0AAAEAwBGMEQCIAaLUzpQpc0C
-BAWnnZxsyW23WgcOsbiOP84EltTkR780AiBG3Ywinpkk+0ozGZC6g/cNkTOXQIl5
-0RXVF04AF/bSljANBgkqhkiG9w0BAQsFAAOCAQEARnZ8z+5zC3vZwBmcK2l7yZ5H
-A3iQO3DSN+51EeycZ7uUN/A3Hx0/ZjdB7JjlWvohA7SimNw6xQald5mI65bmbDwy
-ngtTfcZTx32WtbkU5/PiQSvkWMPqB4HJdyiozpdG6hIPZYvC2CqZHRBfgMo7XkQd
-oj3fW1zBGw79fgqJkcs+9Qx0MGo4BaeBAP8ZSQAfDn/TR8BJFXzHnnk70pTwPKCa
-EPuL8G/QDMy7+9WJB4t9qTdgxuqLdVSA7B3iGFYsQdR6Bjzbbngjr+OQIVDjij8c
-a9+Mw5+S7EM2EE3L+nkHeXyB+EynVNWQqw4ASJ/S3u3OPQHkeKj1ppfBXJW7ww==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL
-MAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu
-Yy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv
-bWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB
-IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a
-6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U
-8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm
-AI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC
-0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05
-PmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ
-oy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo
-MCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B
-Af8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z
-eW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0
-cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5
-bWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud
-EQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU
-bVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6
-Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8
-I2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv
-7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD
-1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU
-Zs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB
-fnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU=
+MIICojCCAYoCAQAwDQYJKoZIhvcNAQEEBQAwFzEVMBMGA1UEAwwMMTIwLjI3LjI3
+Ljk4MB4XDTE5MDIyMjA2MDg1MVoXDTI5MDIxOTA2MDg1MVowFzEVMBMGA1UEAwwM
+MTIwLjI3LjI3Ljk4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3P5X
+4ROFaVpHNoI+a4+epK5gcfRRxyAjdroryjT/HdSQU9CnE28l5zrUsPx7JZcqbnNN
+/S6gJcsIDSqglKRLBgBPab65/MwJvHKoowfuG75144DsgY5bMvoCqSTGX77Ado1W
+vcEjwsYolxiDcnSp9A8VZX/qjTgWHe8/Si2saDa2zJ473n4qa0q/DvGXIQDviZcy
+cxkPJgoRpFw03oJmdZsJGJ34+TN0AN9XiZ0XgOQIKIq8QXc7By+YUryfecz4GYQT
+9f0K9sfY3W0bkkZ6LW9tauZU3N3/nr5fuOU7ia+IhPop7ly+9E6lyGHViwqcufbz
+95wBQJR9AEwbJJdtRQIDAQABMA0GCSqGSIb3DQEBBAUAA4IBAQAQtFdCabM+Ybog
+Z8xAbikeokOXr+X3UnUehXr3/FSJ+0/aWCzmNn8gXskYLyvCR1fkrk/0bVZoDxXt
+pwux58CiJAbn6dhFIP9thqghqQ75Z/YR245pbulpamBgLTVdqWPyaaXokcXpr8wg
+DhPZnfowCFu++UqoBeJ0IJGa1dpKdXYR8VIZFXXBf8vPGWsDu1dxMYHEM03Geutm
+PNOJgENJGu9XHGBtzadiIiUI4rrmBqeMhQCUeMuiT3URfLAKujz2fi2RvohJvI9/
+MYmngt54XY1AJW/wKpdO+FhyIyDl/xGbxdbe1DuCrAm4okAlQVrp1Q2TTEcXflns
+jeT+bba8
-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/ssl/privateKey.pem b/ssl/privateKey.pem
index 922ad3790..25f014052 100755
--- a/ssl/privateKey.pem
+++ b/ssl/privateKey.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEA4b8UtW0dcjlI+WUxSQKCT8E584LyosK2G660OH3n7MfUya02
-2SpKxJuXj44NeeFn6Qv6+4OmbivAoDzq1E/4BKEjGTYVorftsZ2IRT5G9CS4wr5a
-qvk0s3M48mKG/HGBFg/bip2fRpFbqKEWpGqstl42ZfsA++rXzXkXlhwddLw9Fvwp
-MqgZTuLijhLoq8Sy8NR8Zzp3aEDO5NSgsZCv60ZYRIv5Dqo2XjpaF2XP1qfoqXVL
-0gRPjOQ9mDNmfijnIq+kF7s3cJRi4TiSpRXWhW6KQnJrSAQlCBO3txq89YYD/FSt
-UUrHdJXXAT4Ysq+RAn0CnuywtI7SzjiqI5gPIwIDAQABAoIBAD9vYnJY5x1h24+5
-T9AkVFn1AkPbWDNEY8gDn8EAIFv5C2JgujjsGXaGAmDkmgTVwk1KgIyMwgfTY52j
-gJmInzktzp8XA51l8fUnP1O13Fpet0yCERhaTuTeS/JQnX3yp0N70UVyZX9++TK5
-kZNCJqZYcxDVJ8GijGHA1U/pNp3GgIjqbdTrMISRA8MG8gb/zWWI6sDRASVWaWOS
-z41pU4xe32pbjOYaLX/zQY6hGIzOjQquO6USmkexXC1w4iAS7WP0nCTTHfMVx8rg
-R+A2xQElFwJt6aQI+heb21K4wiEoCRZPSHXuZKXcj+6H6wqpzpd0kgCCbbS7dcSL
-I5OyiwECgYEA8Hf/a73wQlly62OT3VC1nOKgAuNzWVThbnzzyFsjsdfVt/Am+SQX
-ORCrNvTfO8UHT8C7qFs4C9BSd/i0ZEWrli1l+ZO4N4EaOLcZYZ27cgBlNDf7BQpQ
-X1p9YoKSpu+3l8e7AUQ23qzbvLyi/sYqLc+tuhITDvHVYobO7yd4iIkCgYEA8FOo
-ksLiBeRKQvQT/goTB01IfPAnLHHLRAUtwd7dhXKZm/m4FQXVOBorslgXRVztaoS0
-Nm9CmTkuvkzMakw22IkqhsxOlRcD6TXMMT6H6k28tj3/knl+3QYGnJ7KE3Azs5+w
-JzJZJ+MRNXiKu1yNCxq+sXWoR84pnMMQNOJ110sCgYAqHmqPnZIynOZDEor4rcVR
-uGQcfWhb0kE2EA7HHiePY+WcNSUuaELlDOVgV92t42HXd0OnRmr3rsJzHw3Brm5S
-fJsq7tPKbQOBwZhhf7YwTp9rWQ7PoDHZscjac1JqiPxYSnSX0THnKNHIKiZGh8El
-iwW73KSX7oXYnxIp03kKOQKBgQCKTHpLyp5rKY6arP78SCvfHdhDHahNaUbB5AEK
-+gecjfBb0/7dCjhDSrwuq4bowatWivtx/+DhcAi4NlXELgu53GV+oP/vyAjWIcFZ
-7VQlv4qDjXYPgp9A7gDMDIzZVs5J5fFm/RBVZdQ3YyDi5UW9SCzIzp6Cg99qeM5Q
-wKlztQKBgDaulZ/cexv55N+5GjgU03wpBnDh8SlHfe/JYeKmMrihSgxxUSPGTkLo
-eosWBVHBrg4xHae4sFF+zbO0Z7EIbRYq9SX/Fh78OAH7PZe6byuESDv9tWPaNpuS
-DFe4sOJXyUFMTYpq6x/gNfafMmOXal9kBZXqbBEMMj8/rKIVokzU
------END RSA PRIVATE KEY-----
\ No newline at end of file
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDc/lfhE4VpWkc2
+gj5rj56krmBx9FHHICN2uivKNP8d1JBT0KcTbyXnOtSw/Hsllypuc039LqAlywgN
+KqCUpEsGAE9pvrn8zAm8cqijB+4bvnXjgOyBjlsy+gKpJMZfvsB2jVa9wSPCxiiX
+GINydKn0DxVlf+qNOBYd7z9KLaxoNrbMnjvefiprSr8O8ZchAO+JlzJzGQ8mChGk
+XDTegmZ1mwkYnfj5M3QA31eJnReA5AgoirxBdzsHL5hSvJ95zPgZhBP1/Qr2x9jd
+bRuSRnotb21q5lTc3f+evl+45TuJr4iE+inuXL70TqXIYdWLCpy59vP3nAFAlH0A
+TBskl21FAgMBAAECggEAJUEbP24zB1eYua+rJibH76sVxyAQySi50cIAr83PVBAJ
+ZJfAEp6iHSDlyhBGEkgxdv0pII1Dohtf+Bg/ic9IdnKG8KSeZedfnM0XcKRdl3+8
+D+Yj+JMu/KD44dq5NlrJxzJ8dPCiPqt5HD+dqSXRoLsKOFogCD50PAeg+7hHYCnI
+worCm6MoCD8Qps6ArmR/YRatAF0wPQxCTX+TRww12gbgWTFPl0ocETth0r3LQHtz
+jaOu/EtO87WXt1i3NjaRImLMnBytOPVUM0tLXGiAnXvfg39c8cyYUof2FbFO+kgT
+nK89NrlPWMUo6jGZyf4riVdcPqza/FH5IEv4ToLL4QKBgQD8ICRM9oLtBJKf+749
+auZbca25fSDfid/pSWaGB0VymJoETPfUMhKnrBi8uLcL0VJ6+I+kFmhZL/j3R5g3
+7D9NhJyfGDBJv3CfjK2L/zPCiESEnMt0IRiEcxaIX+K9SjfHwCam4XLsnDWNG49B
+WZ0onQNjY5IdYV7wsRMlBDmN6wKBgQDgY7qCUJVilRVX2TLOYgKIGaAb7QVVX9Bz
+wukPRD/OFoufZRltbhwWCDrDRVJZlRccpAq+cr6KXg9AKhbn2xc6aLG4vPWBgLB0
+P+QcR4lszRqqiM0yRUhOJSk3nFBtS7lsf80qTdP+Cz/M317/z7yqQNi92tNaHNLN
+sYmVrM61jwKBgQDuIznGS+xcDL6lR3Vns2nDI3twQOTk3uhUA5VHsOSCmeqXd095
+6JXAM4fl8R5LljmulsmttdB3tR0WC1SWNZmREVmR15n8fkrVGF3vZmuwKV92VlbA
+6GWs7LtysgaKvegzzqVzaGxRWjYmgsprckZDzxIdNTYUdBzlgItRokzuYwKBgG7Y
+9U7g7hsIGMYP9ug7RJLlTdHd0e+t6HT3SViQV5DAVHMGZ3xGk7tSj2zdduPoIcW1
+R9VzK6uA8bm50Rzyf1QMWhcvyXwTDZgv48kQkdPcspqh//Qgg6qO8wCUyKplaREv
+RTPrxJjQB9F2WyC2B7Z3WFrZmeT/LigM1zHIb0kDAoGABmrg8nXGBrEdtYXHFdem
+1iP0X3+Xt/RwH50YjsNNbUmngIbiR5q71vFkfM7UhIjlnKX/HfSTCUyCtLjHBIFh
+E/OHbEVgElbegnCx3uX4+kxP/oFGNh9t9fJAOsipaYrVVyQWK3C5ilrcBcx4jdXB
+c4cumeA0lZ2p1hc82ArHxYk=
+-----END PRIVATE KEY-----
\ No newline at end of file