ssl证书从申请到更换全流程(七牛,华为云CDN,阿里云CDN,SLB,nginx,双向认证等)

1,601 阅读6分钟

1、申请证书

1.1 目前ssl证书在阿里云申请(SSL 证书),因为域名在阿里云购买,还有一些服务器。

1.2 因为我们将几个顶级域名的证书合成一个,所以这里买证书的最低要求是: 至少一个单域名和二个以上泛域名,证书的话选择GeoTrust,价格是实惠的,也能满足app的要求

https://cdnbamboo.qupeiyin.cn/20200410/88eefb961447d2b074674c645d46d520.png

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类型的证书为例

https://cdnbamboo.qupeiyin.cn/20200410/de5e691e8875733553e0992c58143f50.png

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里面替换:

https://cdnbamboo.qupeiyin.cn/20200410/a298c54812d8be6aed3afb531dac52ee.png

https://cdnbamboo.qupeiyin.cn/20200410/fc232684dab0be80fb2032c62039dbff.png

更换阿里云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之后都要进行测试验证,反复测试服务和接口是否正常,以便业务正常稳定