1、申请证书
1.1 目前ssl证书在阿里云申请(SSL 证书),因为域名在阿里云购买,还有一些服务器。
1.2 因为我们将几个顶级域名的证书合成一个,所以这里买证书的最低要求是: 至少一个单域名和二个以上泛域名,证书的话选择GeoTrust,价格是实惠的,也能满足app的要求
1.3 下单一个单域名证书和二个泛域名证书,提交到购物车 一起付款,注意一起付款
1.4 付好款之后去 先不要动证书。不要动证书。去阿里云提交工单,合并证书。请看: help.aliyun.com/knowledge_d…
1.5 大概需要半天时间合并好,请随时观注工单状态
1.6 合并好之后,去SSL证书 可以看到 原来买的3个证书合成了1个,然后 点击这个新证书,开始申请域名,
将需要https服务的2个顶级域名和1个二级域名写进去,申请。!!!一定不要写错,因为不能单个退款
1.7 大概三到五天,证书就会批下来。可能会早一点,这个要自已经常去SSL证书里面看
1.8 以上是需要合并证书的伙伴,如果不需要合并,那么只需要将证书下单之后,再申请域名既可,同样,等待几天域名就会下来了。然后执行下列步骤既可
2、更换证书
2.1 在更换证书之前,需要知道哪些域名有https,因为域名太多,不可能一个一个的试。所以这里用python3写了脚本,来批量检测, 脚本分为2个,将放到同一个目录下执行,在执行前请安装相应模块:
python3编写,不兼容python2:
#证书检测类
from urllib3.contrib import pyopenssl
from datetime import datetime
import requests
class SSL_Check:
def __init__(self, url):
self.url = url
def get_url_check(self):
try:
res = requests.get('https://' + self.url, timeout=3)
return res.status_code
except requests.exceptions.RequestException:
return 504
@property
def get_str_time(self):
x509 = pyopenssl.OpenSSL.crypto.load_certificate(pyopenssl.OpenSSL.crypto.FILETYPE_PEM,
pyopenssl.ssl.get_server_certificate((self.url, 443)))
return x509.get_notAfter().decode()[0:-1]
@property
def get_ssl_time(self):
if self.get_url_check() != 504:
ssl_time = datetime.strptime(self.get_str_time, '%Y%m%d%H%M%S')
day = (ssl_time - datetime.now()).days
if day > 500:
return self.url,self.get_url_check(),day
else:
return self.url,self.get_url_check(),"low500"
else:
return self.url,self.get_url_check(),"not https"
#执行检测所有顶级域名下的 子域名 有没有https和到期天数
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeDomainsRequest import DescribeDomainsRequest
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from utils.ssl_check import SSL_Check
#请自行填写阿里云的AccessKey ID 和 Access Key Secret 以及服务器所在地区
client = AcsClient('', '', '')
request = DescribeDomainsRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
datas = json.loads(response)
for i in datas['Domains']['Domain']:
print('-----------: ',i['DomainName'])
requestInfo = DescribeDomainRecordsRequest()
requestInfo.set_accept_format('json')
requestInfo.set_DomainName(i['DomainName'])
requestInfo.set_PageSize(500)
responseInfo = client.do_action_with_exception(requestInfo)
datasInfo = json.loads(responseInfo)
for i in datasInfo['DomainRecords']['Record']:
if i['RR'] != '@':
url = i['RR'] + '.' + i['DomainName']
# print(url)
ssl_check = SSL_Check(url)
print(ssl_check.get_ssl_time)
2.2 检测出哪些需要更换的之后,和项目组沟通,什么时候换,哪些先换
2.3 这边确定的是先换七牛和华为云的。但是七牛和华为云要求的证书格式需要改一下。这里以在阿里云SSL 证书 下载一个nginx类型的证书为例
2.4 下载好证书之后,解压一下 pem后缀的文件直接打开,复制其中的内容到七牛和华为云CDN,然后这里要把key后缀的文件做一下转换,之后把内容复制到 七牛和华为云CDN key 框里面, 转换命令如下:
openssl rsa -inform PEM -outform pem -in xxxx..xxxxx.com.key -out new_key.pem
2.5 接下来就是更换SLB 负载均衡部分, 先在SSL 证书里 点一下部署 选择负载均衡,此时只会把证书发到SLB,然后需要手工去 SLB里面替换:
更换阿里云CDN也是这样,先在证书里面部署推送,然后去CDN里面更新既可
2.6 接下来替换服务器nginx部分, 只要将SSL 证书里面下载好的证书放到nginx配置文件中,reload一下既可
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/ssl/xxxx.com.pem;
ssl_certificate_key /etc/nginx/ssl/xxx.com.key;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 20m;
ssl_prefer_server_ciphers On;
3、双向认证证书
3.1 如果做了移动端双向认证,所以这里需要先在测试环境 多测试几遍。IOS和Android都要测
3.2 制作移动端需要的 cer文件 证书凭证, 在linux服务器执行以下命令生成:
openssl x509 -inform pem -in xxxx.com.pem -out iosAndAndroid.cer -outform DER
将制作好的iosAndAndroid.cer 文件发给 移动端开发同事。然后给出测试接口域名。用来测试
3.3 在更换移动端 证书时,要做到兼容 原来的SSL证书,在为IOS审核等都需要时间,所以此时2个证书都要生效。为此你需要 创建新的SLB或安装新的nginx,以部署新的证书。原来不动。等移动端新版本好了之后。再移除老的证书,当然 最好是不要动老的证书
3.4 创建新的SLB和解析域名到新slb上,更新nginx配置文件,最好是创建一个新的配置文件,从原来配置文件scp一份既可,将域名改一下。
3.5 将nginx配置更新好之后,先不要reload和restart, 用运维工具,检查每台机器的配置是否正确,测试验证好之后再reload
3.6 提前将业务接口地址和token等准备好,当reload配置文件之后,再反复调用这些业务接口确定服务是否正常
3.7 如果做了弹性伸缩,此时要更新弹性伸缩的镜像服务,然后更新弹性的配置,指定弹性机器绑定到SLB,更新好之后 弹一台机器测试是否正常
3.8 因为我们这里只有后台等服务有集成slb到发布系统,所以相应的需要更新发布系统的配置,让新的SLB可用。这个有时间最好做成自动发现。人工难免会有出错的时候
3.9 新建slb时,一定要注意细节,最好参考以前的配置选项,创建好之后对比是否有不同,虚拟服务和转发配置。都要比对是否一样
3.10 测试验证以上 服务和接口正常后,将新的域名发给团队成员
3.11 管理后台的双向认证,这里指的是安全级别要求比较高的管理后台项目,比如用户后台之类,需要再加一层安全设置,此时需要将后台做成账密+验证码登陆,再加证书双向认证,将key给用户导入浏览器 才可访问这个后台,否则就算知道账密也无法登进去
4、测试验证
4.1 在各项工作中,每个进度中,最好都要测试验证,以便业务正常稳定
4.2 在reload之前和reload之后都要进行测试验证,反复测试服务和接口是否正常,以便业务正常稳定