网上有不少关于OpenSSL命令行的用法,问题在于大部分文章只是零碎的使用一个命令行而已,没有一个完整的证书颁发流程。有部分只是自签名证书,被谷歌浏览器和火狐浏览器等绝大部分浏览器认为是不可信任的证书。下面我给出一个完整的实例,让谷歌浏览器和火狐浏览器都显示绿标。
大部分数字证书的颁发业务操作发生在Linux系统上,再加上Windows颁发数字证书的过程中许多应用程序弹出对话框,一个批处理无法在无人为干预的情况下迅速完成操作,本实例的所有命令行在CentOS 7 64位操作系统上运行。
第1步:获得操作权限,检查CA环境
证书的颁发操作需要root权限,首先进入root用户:
sudo -i
检查CA环境是否正常:
openssl -v
file /etc/pki/tls/openssl.cnf
如果无法显示OpenSSL版本或者OpenSSL配置文件信息,那么CA环境是损坏的,建议重新安装OpenSSL。OpenSSL的安装也比较简单,运行:
yum install openssl -y
即可安装好。
第2步:编辑CA服务器信息
颁发证书操作所在的服务器就是CA服务器,虽然操作员也许没有意识到他把眼前下在操作的服务器当成了CA服务器来用。数字证书的颁发者、联系信息都在openssl.cnf中配置,下面进行编辑:
vim /etc/pki/tls/openssl.cnf
openssl.cnf格式也是Windows系统ini的文件格式。结构上分为配置节、键和值。其中,subjectAltName表示此证书认证的网站域名。一个典型的写法是:
subjectAltName=DNS:*.caoshiying.com
表示此网站的所有二级域名都可以通过此CA服务器颁发数字证书获取绿标。一般情况下,建议一个数字证书唯一对应一个域名,因为通配证书也容易被XSS利用。其它信息都在 CA_default
配置节下,其设置比如国家、省会、城市、邮箱等信息都可以在颁发证书的时候从用户输入或者命令行参数中得到。
最重要的配置是指定颁数字证书的时候要使用的数字证书的名称,配置节是:
certificate=$dir/root-cert.pem
private_key=$dir/private/root-key.pem
下一步将创建一个名为root-cert.pem
的根证书。
第3步:创建根证书
一个CA服务器可以存在多个根证书。如果根证书已经存在并且密钥是已知的,则可以跳过这个步骤。如果有重新构建根证书的决心,可以运行以下命令:
cd /etc/pki/CA
rm -fr $deploydir/*
rm -f index.txt
rm -f serial
touch index.txt serial
echo 01 > serial
rm -f root*
rm -f private/*
生成一个根证书密钥:
openssl genrsa -out private/root-key.pem 2048
在实际生产环境中建议把位数设置在4096或者更大的2的幂函数级别上。下面创建公钥并注册到Linux系统:
openssl req -new -x509 -key private/root-key.pem -out root-cert.pem -days 3650 -subj '/C=CN/ST=WH/L=HB/O=XueSongShu/OU=R&D/CN=caoshiying.com/[email protected]/'
cp /etc/pki/tls/certs/ca-bundle.crt{,.bak}
cat root-cert.pem >> /etc/pki/tls/certs/ca-bundle.crt
第4步:把根证书转换为Windows识别的格式
浏览器用户绝大部分用户喜欢Windows操作系统。所有把根证书公钥转换为Windows格式是必须的。下面输出CER和PFX格式的证书,运行:
openssl x509 -outform der -in root-cert.pem -out root-cert.cer
openssl pkcs12 -export -out root-cert.pfx -inkey private/root-key.pem -in root-cert.pem
导出PFX格式的数字证书的时候我输入的密码是123456。建议在生产环境下使用符合安符标准的复杂密码。
把数字证书复到Windows系统以及把数字证书安装到系统根证书存储区的方法,如有不知道操作的朋友,请看我下一篇博客。下面看看效果:
第5步:颁发数字证书
大分部浏览器都已经能够识别自签名证书并标记它们为不能信任。因此再颁发一次证书是必须进行的一个步骤。运行下面的命令行:
cd /etc/nginx/ssl
openssl genrsa -out caoshiying.key 2048
openssl req -new -key caoshiying.key -out caoshiying.csr -days 3650 -subj '/C=CN/ST=WH/L=HB/O=XueSongShu/OU=R&D/CN=www.caoshiying.com/[email protected]/'
openssl ca -in caoshiying.csr -out caoshiying.crt -days 3650
所有询问项都输入y
表示确认。成功截图如下:
颁发出来的的证书不用复制到Windows系统,只需要让Web网站服务器找得到它并确保密钥安全不被他人窃取即可。
第6步:查看颁发的数字证书在Windows系统上的效果
首先查看数字证书本身的效果:
然后看看运用到网站上的效果: