0%

使用OpenSSL生成根证书并签发子证书

关于SSL及证书体系的知识这里不再赘述,仅记录下在Windows下生成根证书并签发子证书的过程。 首先下载OpenSSL-win32( http://www.slproweb.com/products/Win32OpenSSL.html ) , 然后需要通过设置环境变量来指定一个配置文件openssl.cnf,但这个文件安装OpenSSL时没有默认提供,那怎么办? 其实安装Git、Wamp、node.js某些模块时,都会生成这个文件,装个Everything全局搜索一下,一般都能找到一个的.....

把这个文件拷贝到OpenSSL的安装目录,然后设置系统环境变量:OPENSSL_CONF=D:/OpenSSL/openssl.cnf ,然后在OpenSSL安装目录下的bin目录下打开命令行。

首先生成CA根证书私钥

下面的命令表示生成一个不加密的私钥:

1
openssl genrsa -out ca.key 2048

然后生成CA根证书公钥

1
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=HuNan/L=ChangSha/O=spirithy.com/OU=spirithy.com"

这里/C表示国家(Country),只能是国家字母缩写,如CN、US等;/ST表示州或者省(State/Provice);/L表示城市或者地区(Locality);/O表示组织名(Organization Name);/OU其他显示内容,一般会显示在颁发者这栏。注意参数中的"-days"表示有效时间,这里是10年。  

到这里根证书就已经创建完毕了,下面介绍建立网站SSL证书的步骤。

创建SSL证书私钥

下面的命令表示生成一个不加密的私钥:

1
openssl genrsa -out server.key 2048

然后生成SSL证书公钥

1
openssl req -new -days 3650 -key server.key -out server.csr -subj "/C=CN/ST=HuNan/L=ChangSha/O=spirithy.com/OU=spirithy.com/CN=spirithy.com"

这里需要注意的是,/O字段内容必须与刚才的CA根证书相同;/CN字段为公用名称(Common Name),必须为网站的域名(不带www);/OU字段最好也与为网站域名,当然选择其他名字也没关系。  

使用CA根证书签署SSL证书

首先需要做准备工作:

  1. 在openssl应用程序目录下新建 "demoCA" 目录
  2. 在demoCA 目录下新建 "newcerts" 目录、index.txt文件 和 serial 文件
  3. 在serial文件中写入文本“01”
  4. 编辑openssl.cnf,将 CA_default 下的 dir 改为 demoCA目录的路径

然后开始签署:

1
openssl ca -days 3285 -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
接下来有一段提示,找到Sign the certificate? [y/n]这句,打入y并回车,然后出现1 out of 1 certificate requests certified, commit? [y/n],同样y回车。