+1 投票

通常不管是在Linux还是Windows的服务器中,我们在生成csr, key等文件时都是借助openSSL工具,所以本篇主要介绍一下如何使用openSSL生成自签名CA和自签名证书。

一、生成私钥

首先必须有自己的私钥,私钥的生成方式如下,2048表示加密位数,旧的是1024,还可以是4096。

openssl genrsa -out test.sslzoo.com.key 2048

执行过程会有提示:

Generating RSA private key, 2048 bit long modulus
...........+++
..+++
e is 65537 (0x10001)

私钥必须保管好,不能丢失也不能泄露。如果发生丢失或者泄露,则需要重新再操作一次!这样才能让旧的证书失效。

通常建议对私钥再进行一次加密,保证私钥的安全,执行加密命令如下:

openssl rsa -in test.sslzoo.com.key -des3 -out encrypted.key
writing RSA key
Enter PEM pass phrase:https123  #输入指令,https123就是密码
Verifying - Enter PEM pass phrase:https123 #重复上面的指令

记住上述输入的指令,后面会用到。

有了上面的私钥,就可以在openSSL中使用x509命令方式生成证书了。

二、证书请求文件(CSR)

在颁发证书之前,需要由服务器发起一个证书请求文件(certificate sign request),证书(certificate)和证书请求(CSR)文件是办法证书的两个重要部分,证书(certificate)是自签名证书或者自签名CA证书的一个凭据,在信息传输时用来确认身份认证,证书请求(CSR)则是对证书签名的请求,需要使用私钥来进行签名。X509命令还可以将这两个文件进行相互转换。

从第一步生成的私钥再生成证书请求(CSR)的具体方法参考:如何在服务器中生成CSR证书请求文件

引用:

输入下述指令,依赖于上面生成的server.key

sudo openssl req -new -key test.sslzoo.com.key -out test.sslzoo.com.csr

然后看到下一步会逐步要求输入前面的phrase,也就是https123

Enter pass phrase for test.key:https123

再就会要求输入相关信息,请务必认真输入,并不能有其它字符

Common Name不是Company Name,本项千万不可输入错误,会影响到证书安装!这是表示证书验证的域名,比如sslzoo.com和test.sslzoo.com,如果用户想节省成本,同时使用不带www和带www,那就在Common Name中直接输入sslzoo.com顶级域名

Country Name (2 letter code) [AU]:CN  #国家代码
State or Province Name (full name) [Some-State]:ShangHai #省份
Locality Name (eg, city) []:ShangHai  #城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Goovell Inc #公司名称
Organizational Unit Name (eg, section) []:IT   #部门名称
Common Name (e.g. server FQDN or YOUR name) []: test.sslzoo.com #对应验证证书域名
Email Address []: admin@sslzoo.com  #管理员邮箱

继续回车,会要求输入补充信息

Please enter the following 'extra' attributes to be sent with your certificate request

下述留空即可

A challenge password []:
An optional company name []:

 

这时候我们在相应目录下就能找到这个test.sslzoo.com.csr文件,用文件编辑器打开,看到的所有代码就是csr了。

关于自签名证书、自签名CA证书的一些基本概念,请参考:关于SSL中证书颁发机构(CA)的一些基本概念 

三、生成自签名证书

自签名私有证书是用私钥对该私钥生成的证书请求进行签名,也就是对上述的csr进行签名,然后生成证书文件。

这个自签名证书的颁发者是自己,那么验证者也必须持有该证书的私钥,这样才能对安全信息进行验证,或者无条件信任,比如我比较信任12306,那么我就直接无条件信任该证书(继续前往kyfw.12306.cn(不安全)),或者12306把他们服务器上的私钥给我,那这样就更有风险了,对于12306来说。如果是基于内网的加密通信,也就不存在风险可言了。

生成自签名证书命令:

openssl x509 -req -in test.sslzoo.com.csr -signkey test.sslzoo.com.key -out test.sslzoo.com.crt

回车之后得到如下提示:

Signature ok
subject=/C=CN/ST=ShangHai/L=ShangHai/O=Goovell Inc/OU=IT/CN=test.sslzoo.com/emailAddress=admin@sslzoo.com
Getting Private key

说明该自签名证书成功生成,这时候会在当前目录看到文件test.sslzoo.com.crt,这就是这个自签名证书的文件。

四、生成自签名CA证书

CA证书也是自签名证书,可以用来对其它证书进行签名,这样客户端选择信任了CA证书,被CA签名的其它证书就被信任了,此时客户端进行验证时,CA证书则是来自操作系统的信任证书库,或者指定的证书列表。

生成自签名CA证书命令如下:

openssl x509 -req -in test.sslzoo.com.csr -extensions v3_ca -signkey test.sslzoo.com.key -out ca.test.sslzoo.com.crt

这样可以在当前目录下看到ca.test.sslzoo.com.crt文件,即是自签名CA证书。

关于在服务器上部署自签名CA证书,将另则篇再叙。

五、花钱买CA机构的证书最简便

其实上述方法,只能在非商用情况下用于学习、研究、测试之用途,如果你的网站要商用,还是建议购买CA机构的证书,本站代理来自全球比较知名的厂商如GeoTrust, Comodo, Symantec, VeriSign这些CA机构的证书,首先公司资质不说,保费相对也较高!只要把上述的csr证书请求文件发送给goovell,即可申请价格不同的证书,一年也就两三百块的也有。

最新提问 4月 26, 2016 分类:SSL | 用户: unknow (2,120 分)
修改于 6月 29, 2017 用户:unknow

2 个回答

0 投票
有没有开源SSL证书let's encrypt的相关介绍资料
最新回答 5月 6, 2016 用户: 正本清源 (140 分)
0 投票
自签名证书自己懂就可以了!要是给客户用就真坑爹。
最新回答 5月 6, 2016 用户: typxc (410 分)
39 问题
29 回答
15 留言
2,492 用户