83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
|
|
#自签证书脚本 hezhihong
|
||
|
|
import sys,os
|
||
|
|
os.chdir('/www/server/panel/')
|
||
|
|
sys.path.insert(0,"class/")
|
||
|
|
sys.path.insert(0,"class_v2/")
|
||
|
|
import public,json
|
||
|
|
class CreateSSLMain:
|
||
|
|
cert_file="/www/server/vhost_virtual/data/cert/vhost.crt"
|
||
|
|
key_file="/www/server/vhost_virtual/data/cert/vhost.key"
|
||
|
|
def get_ipaddress(self):
|
||
|
|
'''
|
||
|
|
@name 获取本机IP地址
|
||
|
|
@author hwliang<2020-11-24>
|
||
|
|
@return list
|
||
|
|
'''
|
||
|
|
ipa_tmp = public.ExecShell("ip a |grep inet|grep -v inet6|grep -v 127.0.0.1|awk '{print $2}'|sed 's#/[0-9]*##g'")[0].strip()
|
||
|
|
iplist = ipa_tmp.split('\n')
|
||
|
|
return iplist
|
||
|
|
|
||
|
|
def get_host_all(self):
|
||
|
|
local_ip = ['127.0.0.1','::1','localhost']
|
||
|
|
ip_list = []
|
||
|
|
bind_ip = self.get_ipaddress()
|
||
|
|
|
||
|
|
for ip in bind_ip:
|
||
|
|
ip = ip.strip()
|
||
|
|
if ip in local_ip: continue
|
||
|
|
if ip in ip_list: continue
|
||
|
|
ip_list.append(ip)
|
||
|
|
net_ip = public.httpGet("https://ifconfig.me/ip")
|
||
|
|
|
||
|
|
if net_ip:
|
||
|
|
net_ip = net_ip.strip()
|
||
|
|
if not net_ip in ip_list:
|
||
|
|
ip_list.append(net_ip)
|
||
|
|
if len(ip_list) > 1:
|
||
|
|
ip_list = [ip_list[-1],ip_list[0]]
|
||
|
|
return ip_list
|
||
|
|
|
||
|
|
#自签证书
|
||
|
|
def CreateSSL(self):
|
||
|
|
if os.path.exists(self.cert_file) and os.path.exists(self.key_file): return True
|
||
|
|
import base64
|
||
|
|
userInfo = public.get_user_info()
|
||
|
|
|
||
|
|
if not userInfo:
|
||
|
|
userInfo['uid'] = 0
|
||
|
|
userInfo['access_key'] = 'B' * 32
|
||
|
|
|
||
|
|
if 'access_key' not in userInfo or not userInfo['access_key']:
|
||
|
|
userInfo['access_key'] = 'B' * 32
|
||
|
|
|
||
|
|
domains = self.get_host_all()
|
||
|
|
pdata = {
|
||
|
|
"action":"get_domain_cert",
|
||
|
|
"company":"yakpanel.com",
|
||
|
|
"domain":','.join(domains),
|
||
|
|
"uid":userInfo['uid'],
|
||
|
|
"access_key":userInfo['access_key'],
|
||
|
|
"panel":1
|
||
|
|
}
|
||
|
|
cert_api = 'https://api.yakpanel.com/yakpanel_cert'
|
||
|
|
result = json.loads(public.httpPost(cert_api,{'data': json.dumps(pdata)}))
|
||
|
|
if 'status' in result:
|
||
|
|
if result['status']:
|
||
|
|
public.writeFile(self.cert_file,result['cert'])
|
||
|
|
public.writeFile(self.key_file,result['key'])
|
||
|
|
_cert_dir = '/www/server/vhost_virtual/data/cert'
|
||
|
|
for _rpfx in (f'{_cert_dir}/yakpanel_root.pfx', f'{_cert_dir}/baota_root.pfx'):
|
||
|
|
if os.path.exists(_rpfx):
|
||
|
|
os.remove(_rpfx)
|
||
|
|
public.writeFile(f'{_cert_dir}/yakpanel_root.pfx', base64.b64decode(result['pfx']), 'wb+')
|
||
|
|
public.writeFile('/www/server/vhost_virtual/data/cert/root_password.pl',result['password'])
|
||
|
|
print('1')
|
||
|
|
return True
|
||
|
|
print('0')
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
ssl = CreateSSLMain()
|
||
|
|
ssl.CreateSSL()
|