面板设置功能ok

1.关闭面板
2.ipv6监听
3.面板ssl
pull/109/head
Mr Chen 6 years ago
parent c7a21eba7e
commit eaca497825
  1. 1
      .gitignore
  2. 95
      class/core/config_api.py
  3. 1
      data/ssl.pl
  4. 7
      route/__init__.py
  5. 123
      route/static/app/config.js
  6. 12
      route/templates/default/config.html
  7. 77
      ssl/certificate.pem
  8. 55
      ssl/privateKey.pem

1
.gitignore vendored

@ -118,3 +118,4 @@ data/json/config.json
data/site.pl
data/admin_path.pl
data/close.pl
ssl/input.pl

@ -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组件!<p>请尝试手动安装: pip install pyOpenSSL</p>')
public.writeFile(sslConf, 'True')
except Exception as ex:
return public.returnJson(False, '开启失败,无法自动安装pyOpenSSL组件!<p>请尝试手动安装: pip install pyOpenSSL</p>')
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')

@ -0,0 +1 @@
True

@ -191,10 +191,9 @@ def doLogin():
@app.route('/<reqClass>', 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'

@ -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');
}
}
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协议访问面板,继续吗?':'<a style="font-weight: bolder;font-size: 16px;">危险此功能不懂别开启!</a>\
<li style="margin-top: 12px;color:red;">必须要用到且了解此功能才决定自己是否要开启!</li>\
<li>面板SSL是自签证书不被浏览器信任显示不安全是正常现象</li>\
<li>开启后导致面板不能访问可以点击下面链接了解解决方法</li>\
<p style="margin-top: 10px;">\
<input type="checkbox" id="checkSSL" /><label style="font-weight: 400;margin: 3px 5px 0px;" for="checkSSL">我已了经解详情,并愿意承担风险</label>\
<a target="_blank" class="btlink" href="https://www.bt.cn/bbs/thread-4689-1-1.html" style="float: right;">了解详情</a>\
</p>';
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 = '<div class="tab-con">\
<div class="myKeyCon ptb15">\
<div class="ssl-con-key pull-left mr20">密钥(KEY)<br>\
<textarea id="key" class="bt-input-text">'+cert.privateKey+'</textarea>\
</div>\
<div class="ssl-con-key pull-left">证书(PEM格式)<br>\
<textarea id="csr" class="bt-input-text">'+cert.certPem+'</textarea>\
</div>\
<div class="ssl-btn pull-left mtb15" style="width:100%">\
<button class="btn btn-success btn-sm" onclick="savePanelSSL()">保存</button>\
</div>\
</div>\
<ul class="help-info-text c7 pull-left">\
<li>粘贴您的*.key以及*.pem内容然后保存即可<a href="http://www.bt.cn/bbs/thread-704-1-1.html" class="btlink" target="_blank">[帮助]</a></li>\
<li>如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书</li><li>PEM = .crt + (root_bundle).crt</li>\
</ul>\
</div>'
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');
}

@ -19,9 +19,17 @@
</div>
<div class="ss-text pull-left mr50">
<em class="btlink" style="color: #20a53a;" onclick="GetPanelSSL()" title="点击自定义面板证书">面板SSL</em>
<em title="开启后允许使用ipv6访问面板">监听IPv6</em>
<div class='ssh-item'>
<input class='btswitch btswitch-ios' id='panelIPv6' type='checkbox' {{data['ipv6']}}>
<label class='btswitch-btn' for='panelIPv6' onclick="setIPv6()"></label>
</div>
</div>
<div class="ss-text pull-left mr50">
<em class="btlink" style="color: #20a53a;" onclick="getPanelSSL()" title="点击自定义面板证书">面板SSL</em>
<div class='ssh-item'>
<input class='btswitch btswitch-ios' id='panelSSL' type='checkbox'>
<input class='btswitch btswitch-ios' id='panelSSL' type='checkbox' {{data['ssl']}}>
<label class='btswitch-btn' for='panelSSL' onclick="setPanelSSL()"></label>
</div>
</div>

@ -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-----

@ -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-----
-----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-----
Loading…
Cancel
Save