前置知道
○OpenSSL是为实现SSL和TLS提供支持的工具包;
○HTTPS证书只能绑定域名而不能绑定某个IP;
○1.1.1版本OpenSSL命令用法的官方文档;
○操作环境:
1 | Windows 10 |
操作步骤
添加本地域名
●定义本地域名以”blog.congzhou.com”为例,将域名解析添加到“Windows\System32\drivers\etc”下的hosts文件,hosts文件中的域名不支持通配符;
1 | 127.0.0.1 blog.congzhou.com |
生成HTTPS所需私钥与证书
●执行如下命令创建本地模拟CA的私钥与CA根证书,分别生成”RootCA.key”和”RootCA.pem”两个文件,其中用到的国家编码在这里
1 | openssl req -x509 -nodes -new -days 365 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=CN/CN=YCZ-Root-CA" |
●执行如下命令生成上一步pem证书的对应crt格式的证书文件”RootCA.crt”,Windows中crt扩展名的证书文件右键菜单才有”安装”选项;
1 | openssl x509 -inform pem -in RootCA.pem -out RootCA.crt |
●执行如下命令创建本地域名网站私钥与网站证书req,分别生成”congzhou.key”和”congzhou.csr”两个文件,这里将证书签到域名”*.congzhou.com”方便以后也可以给其他二级子域名使用;
1 | openssl req -new -nodes -newkey rsa:2048 -keyout congzhou.key -out congzhou.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Company Limited/CN=*.congzhou.com" |
●创建包含SAN等证书扩展信息的congzhou.ext文件,文件内容如下;
1 | authorityKeyIdentifier=keyid,issuer |
●使用CA证书”RootCA.pem”文件及证书扩展信息”congzhou.ext”文件给网站证书签名生成证书到”congzhou.crt”文件;
1 | openssl x509 -req -days 1024 -in congzhou.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile congzhou.ext -out congzhou.crt |
添加对CA证书的信任
♂方式1:在”RootCA.crt”文件的右键菜单选”安装证书”,”证书存储”选择”受信任的根证书颁发机构”;
♂方式2:运行”certmgr.msc”,在左侧“受信任的根证书颁发机构->证书”上右键菜单“所有任务->导入”选择RootCA.crt文件安装;
♂安装成功后在”certmgr.msc”证书管理程序中可以看到刚刚创建的本地模拟CA信息;
本地网站使用证书
♀使用证书,以nginx为例,server段添加如下内容:
1 | server_name blog.congzhou.com; |
结果验证
▲验证1:访问本地https网站,浏览器校验通过;
▲验证2:浏览器中点开证书详情,可以看到颁发者、使用者信息,其中的SAN在”使用者可选名称”字段;
参考文献
●How to Create Trusted Self-Signed SSL Certificates and Local Domains for Testing
●How to create an HTTPS certificate for localhost domains
●Solve Errors: “Subject Alternative Name Missing” “NET::ERR_CERT_COMMON_NAME_INVALID”
●What is the SSL Certificate Common Name