ssl证书的生成与签名
一些概念
KEY : 私钥文件,决定ssl安全的基础
CSR : 证书请求文件,包含公钥和证书信息
CA : 中级证书颁发机构,一般是可信的第三方,CA证书会验证公钥是否被认证
root CA:通过它的私钥对中级机构提交的CSR进行了签名
申请ssl证书需要用到openssl,linux系统中默认会安装,手动安装openssl:
yum install -y openssl openssl-devel
一.生成私钥
私钥是SSL安全性的基础,使用RSA算法生成,只有证书申请者持有,即使CA也没有对私钥的访问权限,应妥善保管。私钥长度决定其安全性,2009年768位RSA已被破解,1024位RSA短期内是安全的,但随着计算机越来越快,已不足以抵御攻击,为了安全起见应尽量使用2048位RSA,生成2048位私钥:
openssl genrsa -out nixops.me.key 2048
如果对安全性要求较高,可以用密码加密密钥文件,每次读取密钥都需输入密码:
openssl genrsa -des3 -out nixops.me.key 2048
二.生成CSR
证书签名请求文件(CSR)中包含了公钥和证书的详细信息,将CSR发送给CA认证后就会得到数字证书或证书链,生成CSR文件:
openssl req -new -sha256 -key nixops.me.key -out nixops.me.csr
按照提示输入:国家、省份、城市、组织名、部门、公共名称、邮件地址等,最后的extra信息不要填写,个人用户也可以使用默认或留空,只需注意‘Common Name’是要使用ssl证书的域名,根据实际情况,可以写单域名,多个域名,或使用‘*’通配域名
验证CSR文件信息:
openssl req -noout -text -in nixops.me.csr
确认信息正确就可以提交给ca进行认证,CA会根据你的CSR文件进行签名,之后颁发数字证书,该数字证书和私钥就可以部署到服务器了;通常ca认证需付费,普通ssl证书不贵,也有一些提供免费的证书的ca,如startssl、Let's Encrypt等
三.自签名
在某些情况下,如内网https的应用,不需要付费使用第三方签名,此时就可以使用自签名证书。自签名分两种:
- 使用自己的私钥签发自己的csr生成证书,也可以直接生成私钥和证书
- 生成ca,使用ca签发
生成ca的好处是:客户只要手动信任该ca一次,即可信任该ca签发的所有证书,不需要为每个证书添加信任
3.1 使用自签名
使用上面生成的私钥签发证书:
openssl x509 -req -days 365 -in nixops.me.csr -extensions v3_ca -signkey nixops.me.key -out nixops.me365.crt
或者直接生成私钥和证书:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout nixops.me.key -out nixops.me.crt
可以使用chrome浏览器导出证书并安装到windows信任证书中,安装后浏览器地址栏的https就会变成绿色。导出方法:访问https网站,点击地址栏上有红色叉的锁型图标,点击详细信息,点击查看证书,在弹出的证书窗口中点击详细信息选项卡,点击复制到文件,之后按证书导出向导的提示即可导出
3.2 使用ca签名
生成 CA:
openssl genrsa -out CA.key 2048
openssl req -new -x509 -key CA.key -out CA.cer -days 36500 -subj /CN='Nixops.me CA'
使用ca签发证书:
openssl x509 -req -in nixops.me.csr -extensions v3_usr -CA CA.cer -CAkey CA.key -CAcreateserial -out nixops.me.crt
为了更好的兼容浏览器,还需:
cat CA.cer >> nixops.me.crt
客户端手动信任CA.cer即可,windows下可以双击安装
参考文章:
http://www.51ean.com/interaction/safety_information_details.html?postId=585
http://blog.csdn.net/tenfyguo/article/details/40922813
http://www.wosign.com/Basic/index.htm
http://www.cnblogs.com/kyrios/p/tls-and-certificates.html