概念:
参考:http://blog.csdn.net/howeverpf/article/details/21622545
http://www.cnblogs.com/littlehann/p/3738141.html
SSL生成证书流程
server生成私钥server.key--> 生成csr -> +(ca.key+ca.crt)-> 生成证书server.crt
/
CA导出私钥(ca.key)和证书(ca.crt)
\
client生成私钥client.cky--> 生成csr -> +(ca.key+ca.crt)-> 生成证书client.crt
步骤:
openssl genrsa -des3 -out ca.key 2048
ca.key是密钥文件名,是生成的rsa私钥,des3算法,openssl格式,2048位强度;-out指定生成文件的文件名。
注意:这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密。后面的2048是生成密钥的长度。
为了生成这样的密钥,默认中间需要输入一个密码(适用于有安全需求的场合)。可以通过以下方法生成没有密码的key(其实就是从密钥对中提取了私钥,一般无此必要):
openssl rsa -in ca.key -out ca.key ##此时生成的ca.key没有密码
openssl req -new -x509 -days 365 -key ca.key -out ca.crt ##这里及下面的ca.key均带密码
注意:碰到"Unable to load config info from /usr/local/ssl/openssl.cnf"时,请下载一个可用的openssl.cnf,并追加参数"-config openssl.cnf路径"即可.
"req":openssl子命令,用于生成证书;"-new":生成新的证书请求;"-days 365":从生成之时算起,证书时效为365天(仅当使用-x509选项后有效);"-x509":生成自签名证书,没有该项时表示生成csr.
生成证书时,需输入识别证书持有者身份的信息,下表是关于它们的缩写、说明和一些填写说明。【此部分参考了互动百科的SSL条目】(带"*"重要,必填)
DN字段名 缩写 说明(我的信息) 填写要求
Country Name C 证书持有者所在国家(CN) *要求填写国家代码,用2个字母表示
State or Province Name ST 证书持有者所在州或省份(zhejiang) 填写全称,可省略不填
Locality Name L 证书持有者所在城市(hangzhou) 可省略不填
Organization Name O 证书持有者所属组织或公司(xxx) *最好还是填一下
Organizational Unit Name OU 证书持有者所属部门(no) 可省略不填
Common Name CN 证书持有者的通用名(XXX.com) *必填。
对于非应用证书,它应该在一定程度上具有惟一性;
对于应用证书,一般填写服务器域名或通配符样式的域名。
Email Address 证书持有者的通信邮箱([email protected]) 可省略不填
注意:证书的详细信息-使用者或颁发者中出现一些明明没有设置过的信息时,请检查openssl.cnf [req_distinguished_name],注释掉*_default的参数.
因为这里只是用于测试,这里选择1024强度.
openssl genrsa -aes128 -out server.key 1024
注意:golang中使用https时需另从密钥对中提取私钥"openssl rsa -in server.key -out server_pri.key.
openssl req -new -key server.key -out server.csr
此时,在common name中填入网站域名,如blog.xxx.net即可生成该站点的证书,同时也可以使用泛域名如*.xxx.net来生成所有二级域名可用的网站证书.多域名证书可通过修改openssl.cnf生成.
其他说明:"Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #加密证书请求的密码,证书请求需要在网络上传递,所以加密防止别人窥探,一般不用填
An optional company name []: #不清楚,不用填
"时,
openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in server.csr -out server.crt
参数说明:
ca //使用openssl的ca子命令
-in server.csr //指定待签发证书的 CSR文件为 server.csr
-out server.crt //指定输出所签发证书的信息到文件,且文件名为server.crt
-cert ca.crt //指定为证书签名的CA的公钥证书为ca.crt【用到CA证书的持有者信息】
-keyfile ca.key //指定为证书签名的CA的私钥文件为ca.key【用CA私钥实际执行签名】
-days 365 //指定所签发证书的有效期为365天(1年),不允许超过ca.crt的有效期
-policy policy_anything //指定签发策略为 policy_anything 【即,允许所签发证书的持有者信息和颁发者信息之间不遵守任何匹配策略】
-md //指定签名哈希算法[默认是openssl.cnf中的default_md]
如果ca.key没有密码,以上命令后输入两次”y”,即可生成server.crt.
错误:
1."“I am unable to access the..."
按照openssl.cnf里的[CA_default]定义
mkdir -p demoCA/newcerts
touch ./demoCA/index.txt
echo "01" > demoCA/serial #颁发证书时使用的序列号,使用后会递增.重置serial时,需清空newcerts文件夹和index.txt
C. 导入证书
将ca.crt导入自己的操作系统即可(证书[未导入前]上有提示导入到哪个项目下).
ps:
Mozilla、思科、Akamai、IdenTrust、EFF和密歇根大学研究人员宣布了 Let’s Encrypt CA项目,计划为网站提供免费SSL证书,加速将Web从HTTP过渡到HTTPS(从2015夏开始,详细:http://linux.cn/article-4254-1.html).
SSL证书详解--数字签名和数字证书 http://www.livyfeel.com/ssl/
其他参考:https://linux.cn/article-5443-1.html
原文链接:http://m.oschina.net/blog/337087
转载于:https://blog.51cto.com/13187574/2083986