前言
本文介绍如何在Mac OS下方便的利用钥匙串程序制作自签名根证书,以及用它签发支持多个域名与泛域名的HTTPS证书。
制作自签名根证书
在/Applications/Utilities
里打开“钥匙串访问”这个程序,在菜单中选“钥匙串访问” -> “证书助理” -> “创建证书”。过程如图:
名称可以按自己的喜爱去写。
有效期添长一些,比如3650
。
这里的信息可写可不写。
勾选“证书签名”与“CRL签名”用来颁发与吊销证书。
这里一定要选“将此证书用作证书颁发机构”。
点击继续直到完成。
创建完成后,双击自签名的证书,将证书设置为始终信任。如图:
导出自签名根证书
之后将自签名的根证书导出,命名为ca.p12
,存到随意位置。这里一定要选证书和密钥同时导出来,导出的时候可以不设置密码,但之后要及时删除掉ca.p12
,以防信息泄露。
创建多域名配置文件
接下来创建配置文件san.cnf
,按照要申请的域名去编辑alt_names
配置节,其它配置节不用动。例如要申请 *.example.com
example.com
localhost
的多域名证书,按如下配置。编辑完后与之前导出的ca.p12
存到一个目录下。
[ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext [ req_distinguished_name ] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) organizationName = Organization Name (eg, company) commonName = Common Name (e.g. server FQDN or YOUR name) [ req_ext ] subjectAltName = @alt_names [alt_names] DNS.1 = *.example.com DNS.2 = example.com DNS.3 = localhost
签发多域名证书
然后进到ca.p12
与san.cnf
存放的目录执行下列命令:
openssl pkcs12 -clcerts -nokeys -out ca-cert.pem -in ca.p12 #导出公钥 openssl pkcs12 -nocerts -nodes -out ca-key.pem -in ca.p12 #导出私钥
执行上面两行命令的时候,会提示输入导出ca.p12
文件时设下的密码,如果没有设置,直接回车就行。然后继续执行下面的命令签发证书。
openssl req -out user-cert.csr -newkey rsa:2048 -nodes -keyout private.key -config san.cnf #创建多域名证书请求 openssl x509 -req -in user-cert.csr -CAcreateserial -CA ca-cert.pem -CAkey ca-key.pem -out cert.pem -days 500 -sha256 -extfile san.cnf -extensions req_ext #签发证书
执行的过程中提示输入信息,Common Name
写成你要申请的主要域名,如:example.com
或www.example.com
,也可以写成localhost
,其余的不知道怎么写的话可以回车跳过。
最后得到的cert.pem
为证书,private.key
为证书私钥。其它文件都要删除掉。最后将证书和私钥配置到server中,以nginx的为例:
listen 80; listen 443 ssl; server_name example.com; ssl_certificate pki/cert.pem; ssl_certificate_key pki/private.key;
配置完server后,记得重启服务。用浏览器访问,可以看到最后的效果: