https部署折腾(二):OpenSSL通过PEM格式私钥生成用于申请SSL证书的CSR文件

CSR,全称Certificate Signing Request,译为证书签发请求,就是用于申请证书的,放在文本文件中的,一串字符,获取方式通过私钥生成。

既然要使用SSL加密,那么需要了解非对称加密,这个其实比较理论,就大概介绍一下。

有种算法叫做RSA非对称算法,通过这个算法可以获得两个密钥,一个叫公钥,用于加密数据,一个叫私钥,用于解密数据,这两个密钥是不同的,所以叫做非对称加密,好处是只用把公钥给加密方,一旦加密后只有私钥才能打开,而私钥是不会公开的,所以相对安全,即比对称加密安全(加解密的密钥相同)。而SSL就是利用了非对称加密(当然,也使用到了对称加密,这里只说非对称加密),如果要使用SSL,首先需要一对密钥,即公钥和私钥。那么密钥和CSR以及SSL证书有什么关系呢?其实简单来说SSL证书就是公钥,而CSR用于向证书颁发商申请SSL证书,而CSR是通过私钥生成的,大概就是:私钥 -> CSR -> SSL证书(公钥+站点信息等其他信息),这样一说整个线路就连贯起来了吧。

那么为什么要使用SSL证书呢,既然我们可以自行生成私钥和公钥(证书),为什么不直接使用呢?就是因为证书没有经过认证,是可以随意篡改的,如果在数据传输环节,有人更改了证书,即更改了公钥,那么数据落入他人之手后,就可以利用生成伪造证书的私钥进行解密,这样根本就是不安全的,而如果证书认证过,就无法被篡改,因为一旦篡改,浏览器就会提示证书不安全了。所以,要使用认证的证书。

(好吧,理论还是不在行,上面的话看看就好,具体的请百度)

下面来说说怎么生成私钥对,以及如何生成CSR文件:

因为主要是用于部署站点的https,就是用openssl来生成私钥吧,首先下载openssl的window版本(Linux就不说了,因为我根本就不知道怎么玩儿…既然会Linux,安装openssl应该是简单到爆了吧),现在网上很多说openssl安装的都是神的存在,都是自己下载源码进行编译,这些人我不想和他们说话,害的我瞎搞了半天也没搞出个名堂,还是slproweb.com哥们儿比较务实,直接给我们提供了编译好的openssl for windows的安装软件,下载地址:http://slproweb.com/products/Win32OpenSSL.html,进入页面后选择对应的文件下载,一路next搞定安装。

生成CSR文件,用于申请SSL证书

下载openssl的页面

安装完成后,使用风标键 + R,输入“cmd”打开黑框框,将目录定位到到openssl的安装目录下的bin目录。

32为系统默认openssl 32位是安装在c盘program files下,64位系统默认openssl 32位是安装在program files (x86)下,openssl 64位在program files下,这里以64位系统,openssl 64位为例:

1,输入如下命令进入目录:

cd..\..\
cd "Program Files\OpenSSL-Win64\bin"

2,输入下面命令生成私钥:

openssl genrsa -out d:\juwends_pri.pem 2048

其中
d:\juwends_pri.pem 是私钥保存的位置
2048 是表示密钥长度是2048bit,还有1024,越长越难破解

当出现如下字符后表示生成成功:

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

3,输入下面命令生成CSR文件:

openssl req -new -key d:\juwends_pri.pem -out d:\juwends_csr.csr

其中
d:\juwends_pri.pem 是第2步中生成的私钥
d:\juwends_csr.csr 是生成CSR文件的位置

此时应该出现下面的文字,跟着填写即可:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: (填写国家名称,随便,比如CN)
State or Province Name (full name) [Some-State]: (填写省份名称,随便,比如SC)
Locality Name (eg, city) []: (填写城市名称,随便,比如CD)
Organization Name (eg, company) [Internet Widgits Pty Ltd]: (填写组织名称,随便,比如juwends.com)
Organizational Unit Name (eg, section) []: (填写单位名称,随便,比如juwends.com)
Common Name (e.g. server FQDN or YOUR name) []: (填写域名,重要,必须填写域名,比如juwends.com)
Email Address []: (填写邮箱,最好填写能记住的邮箱)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (填写密码,重要,必须记住,有些服务器配置时需要提供)
An optional company name []: (填写可选公司名称,随便,比如juwends.com)

填写完成后,CSR文件就生成好了。就可以将CSR中的内容拿去申请SSL证书了,SSL证书申请请见下一篇文章《StartSSL申请免费SSL证书的方法》。

后话:

上文描述了如何使用openssl生成私钥和CSR文件,其实生成私钥的方法不止使用openssl,Java的SDK的bin目录下有个叫keytool的程序,也同样提供了生成密钥对的方法,但是这个密钥是用在tomcat服务器上的(openssl的密钥用于nginx或apache服务器的),使用keytool生成密钥会先生成密钥存储文件,即.keystore文件,而同时keystore文件中就包含了一个私钥,也就类似openssl生成的.pem私钥文件了,然后再用keytool工具和keystore文件生成CSR文件,流程和openssl是一样一样的,只是工具和密钥格式不一样罢了,这些不同格式密钥都可以互相转换的,后面的文章再做介绍了。

本文《https部署折腾(二):OpenSSL通过PEM格式私钥生成用于申请SSL证书的CSR文件》来自 www.juwends.com ,欢迎转载或CV操作,但请注明出处,谢谢!