ssl证书简介

直接使用的代码和解释:

(注意,要先安装OpenSSL工具,百度一下,很方便,Windows自带Linux环境,百度一下,也很方便)

第1步:生成私钥

使用openssl工具生成一个RSA私钥

1$ openssl genrsa -des3 -out server.key 2048

说明:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名。

注意:生成私钥,需要提供一个至少4位的密码。

第2步:生成CSR(证书签名请求)

生成私钥之后,便可以创建csr文件了。

此时可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(很贵)。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名,具体操作如下:

1$ openssl req -new -key server.key -out server.csr

说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Beijing

Locality Name (eg, city) []:Beijing

Organization Name (eg, company) [Internet Widgits Pty Ltd]:joyios

Organizational Unit Name (eg, section) []:info technology

Common Name (e.g. server FQDN or YOUR name) []:demo.joyios.com

Email Address []:liufan@joyios.com


第3步:删除私钥中的密码

在第1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次Apache启动Web服务器时,都会要求输入密码,这显然非常不方便。要删除私钥中的密码,操作如下:

cp server.key server.key.org

openssl rsa -in server.key.org -out server.key


第4步:生成自签名证书

如果你不想花钱让CA签名,或者只是测试SSL的具体实现。那么,现在便可以着手生成一个自签名的证书了。

需要注意的是,在使用自签名的临时证书时,浏览器会提示证书的颁发机构是未知的。

1$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

说明:crt上有证书持有人的信息,持有人的公钥,以及签署者的签名等信息。当用户安装了证书之后,便意味着信任了这份证书,同时拥有了其中的公钥。证书上会说明用途,例如服务器认证,客户端认证,或者签署其他证书。当系统收到一份新的证书的时候,证书会说明,是由谁签署的。如果这个签署者确实可以签署其他证书,并且收到证书上的签名和签署者的公钥可以对上的时候,系统就自动信任新的证书。

第5步:安装私钥和证书

将私钥和证书文件复制到Apache的配置目录下即可,在Mac 10.10系统中,复制到/etc/apache2/目录中即可。

小结和注意:

1.代码写入时不要把前面的$写进去,这只是一个个人习惯

2.运行时可能会出现需要输入一些密码的情况,按照自己的想法写就行

3.运行完后一般在你的电脑C的用户下面,找不到就直接搜索这个文件名。

4.会生成这四个文件,server.key,server.csr,server.crt,server.key.org,其中“server”是自己定义的文件名,你也可以取其他的,只不过大部分人都默认用这个名字,好找也形象一些。你只需要使用.key和.crt这两个文件就可以了

5.如果在本地测试使用的,就把上述两个文件放在你的项目目录下面就可以




完整的各种证书(仅供参考)


先把用到的命令行放上来方便备查:

如不需要私钥密码,则删掉-des3参数即可

自签名:

# 1.生成私钥openssl genrsa -des3 -out server.key 1024# 

2.从秘钥中删除 Passphrasecp server.key server.key.orgopenssl rsa -inserver.key.org -out server.key# 

3.生成 CSR (Certificate Signing Request)openssl req -new -key server.key -out server.csr# 

4.生成自签名证书openssl x509 -req -days 365 -inserver.csr -signkey server.key -out server.crt

私有 CA 签名:

# 1.创建 CA 私钥openssl genrsa -des3 -out ca.key 4096# 

2.生成 CA 的自签名证书openssl req -new -x509 -days 365 -key ca.key -out ca.crt# 

3.生成需要颁发证书的私钥openssl genrsa -des3 -out server.key 4096# 

4.生成要颁发证书的证书签名请求,证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Nameopenssl req -new -key server.key -out server.csr# 

5.用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名openssl x509 -req -days 365 -inserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

一、概述

本文非常简单地展示了 SSL 的实现,以及整个过程中,证书所扮演的角色。

1、什么是证书及证书的作用

普通的 Web 传输,通过 Internet 发送未加密的数据。这样的话,任何人使用恰当的工具都可以窥视通讯数据的内容。很明显,这会导致出现一些问题,尤其对于有安全和隐私比较敏感的场景,如:信用卡数据、银行交易信息。SSL(Secure Socket Layer)用于加密在 Web Server 与 Web Client(最常见的是 Browser) 之间传递的数据流。

SSL 使用非对称加密算法(Asymmetric Cryptography),通常指PKI(Public Key Cryptography)。使用 PKI 创建两个秘钥,一个公钥,一个私钥。使用任何一个 Key 做的加密,必须使用另外一个进行解密。这样的话,使用服务器私钥加密的数据,只能通过其对应的公钥进行解密,以确保数据是来自服务器。

为什么使用 SSL 处理数据需要证书?其实从技术角度来说,证书并不是必需的,数据很安全,而且不容易被第三方解密。但是,证书对于通讯过程,扮演着至关重要的角色。证书通过可信的 CA 签名,以确保证书的持有者与其对外所宣称的身份一致。使用未经认证签名的证书,数据可以被加密,但是与你通讯的一方,可能并不如你想。没有证书的话,伪装攻击(Impersonation Attacks)会变得更为普遍。

2、证书的三个作用

加密通信

身份验证(验证对方确实是对方声称的对象)

数据完整性(无法被修改,修改了会被知)

3、自签名证书及自签名类型

当由于某种原因(如:不想通过 CA 购买证书,或者仅是用于测试等情况),无法正常获取 CA 签发的证书。这时可以生成一个自签名证书。使用这个临时证书的时候,会在客户端浏览器报一个错误,签名证书授权未知或不可信(signing certificate authority is unknown and not trusted.)。

自签名证书

私有CA签名的证书

自签名证书的Issuer和Subject是一样的

区别:

自签名的证书无法被吊销,CA 签名的证书可以被吊销。

能不能吊销证书的区别在于:如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信。

如果你的规划需要创建多个证书,那么使用私有 CA 的方法比较合适,因为只要给所有的客户端都安装了 CA 的证书,那么以该证书签名过的证书,客户端都是信任的,也就是安装一次就够了。

如果你直接用自签名证书

,你需要给所有的客户端安装该证书才会被信任,如果你需要第二个证书,则还的挨个给所有的客户端安装证书2才会被信任。

二、自签名证书

第一步:生成私钥

openssl工具集用于生成 RSA Private Key 和 CSR (Certificate Signing Request),也能用于生成自签名证书,用于测试目的或内部使用。

第一步创建 RSA Private Key。这个秘钥:

1024 bit RSA key

使用 3DES 加密

使用 PEM 格式存储,ASCII,可读

命令行:

openssl genrsa -des3 -out server.key 1024

执行结果:

Generating RSA private key,1024bit long modulus.........................................................++++++........++++++eis65537(0x10001)Enter PEMpassphrase:Verifying password - Enter PEMpassphrase:

第二步:从秘钥中删除 Passphrase

我们之前生成的私钥,是带有 passphrase 的。这带来一个副作用,就是需要在使用过程中输入密码。这对于一些特定场景来说会带来一些问题。比如:Apache 的自动启动过程,或者一些工具,甚至有没有提供输入 passphrase 的机会。其实是可以将 3DES 的加密从秘钥中移除的,这样,使用的过程中就不再需要输入 passphrase。这也带来另一个问题,如果其他人获取到了未加密的私钥,对应的证书也需要被吊销,以避免带来危害。

使用以下命令行来从秘钥中移除 pass-phrase:

cp server.key server.key.orgopenssl rsa -inserver.key.org -out server.key

新创建的server.key文件中,不再包含 passphrase。

-rw-r--r--1rootroot745Jun29 12:19server.csr-rw-r--r--1rootroot891Jun29 13:22server.key-rw-r--r--1rootroot963Jun29 13:22server.key.org

第三步:生成 CSR (Certificate Signing Request)

一旦私钥生成,CSR (Certificate Signing Request) 就可以被生成了。CSR 可以用于以下两种用途中的任何一种:

理想地,将 CSR 发送到 CA,例如: Thawte、Verisign,会做身份验证,并颁发签名证书

对 CSR 进行自签名

本文的下一部分演示就是演示 CSR 进行自签名的方式。

生成 CSR 的过程中,会提示输入一些信息,这些是证书的X.509属性。其中一个提示是Common Name (e.g., YOUR name),这个非常重要,这一项会填入FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,这个 FQDN 会被 SSL 保护。如果要被保护的网站是https://public.akadia.com,那么输入public.akadia.com。

用于生成 CSR 的命令行如下:

openssl req -new -key server.key -out server.csr

执行过程界面如下:

Country Name (2letter code) [GB]:CHStateorProvince Name (full name) [Berkshire]:BernLocality Name (eg, city) [Newbury]:OberdiessbachOrganization Name (eg, company) [My Company Ltd]:AkadiaAGOrganizational Unit Name (eg, section) []:InformationTechnologyCommon Name (eg, your nameoryour server's hostname) []:public.akadia.com

Email Address []:martin dot zahn at akadia dot ch

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

第四步:生成自签名证书

当由于某种原因(如:不想通过 CA 购买证书,或者仅是用于测试等情况),无法正常获取 CA 签发的证书。这时可以生成一个自签名证书。使用这个临时证书的时候,会在客户端浏览器报一个错误,签名证书授权未知或不可信(signing certificate authority is unknown and not trusted.)。

生成一个可以使用 365 天的临时证书,使用如下命令行:

openssl x509 -req -days 365 -inserver.csr -signkey server.key -out server.crt

执行结果:

Signature oksubject=/C=CH/ST=Bern/L=Oberdiessbach/O=Akadia AG/OU=InformationTechnology/CN=public.akadia.com/Email=martin dot zahn at akadia dot chGettingPrivatekey

三、创建私有 CA ,然后用该 CA 给证书进行签名

第一步:创建 CA 私钥

$ openssl genrsa -des3 -out ca.key 4096

第二步:生成 CA 的自签名证书

$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt

其实 CA 证书就是一个自签名证书

第三步:生成需要颁发证书的私钥

$ openssl genrsa -des3 -out server.key 4096

第四步:生成要颁发证书的证书签名请求

$ openssl req -new -key server.key -out server.csr

这里注意:证书签名请求当中的Common Name必须区别于 CA 的证书里面的Common Name

第五步:用第二步创建的 CA 证书给第四步生成的签名请求进行签名

$ openssl x509 -req -days 365 -inserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

四、生成证书链多级证书

1、生成根 CA 并自签(Common Name 填 RootCA)

$ openssl genrsa -des3 -out keys/RootCA.key 2048

$ openssl req -new -x509 -days 3650 -key keys/RootCA.key -out keys/RootCA.crt

2、生成二级 CA(Common Name 填 SecondCA)

$ openssl genrsa -des3 -out keys/secondCA.key 2048$ openssl rsa -inkeys/secondCA.key -out keys/secondCA.key$ openssl req -new -days 3650 -key keys/secondCA.key -out keys/secondCA.csr$ openssl ca -extensions v3_ca -inkeys/secondCA.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out keys/secondCA.crt -cert keys/RootCA.crt -keyfile keys/RootCA.key

3、生成三级 CA(Common Name 填 ThirdCA)

$ openssl genrsa -des3 -out keys/thirdCA.key 2048$ openssl rsa -inkeys/thirdCA.key -out keys/thirdCA.key$ openssl req -new -days 3650 -key keys/thirdCA.key -out keys/thirdCA.csr$ openssl ca -extensions v3_ca -inkeys/thirdCA.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out keys/thirdCA.crt -cert keys/secondCA.crt -keyfile keys/secondCA.key

4、使用三级 CA 签发服务器证书

$ openssl genrsa -des3 -out keys/server.key 2048$ openssl rsa -inkeys/server.key -out keys/server.key$ openssl req -new -days 3650 -key keys/server.key -out keys/server.csr$ openssl ca -inkeys/server.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out keys/server.crt -cert keys/thirdCA.crt -keyfile keys/thirdCA.key

注:

指定证书数据内容

-subj /C=CN/ST=Guangdong/L=Shenzhen/O=PAX/OU=Common Software/CN=Server CA/emailAddress=qiaojx@paxsz.com

去掉 key 加密的输入提示:去掉-des3

不提问:使用-batch参数

五、吊销证书(作废证书)

首先

$echo00 > /etc/pki/CA/crlnumber

一般由于用户私钥泄露等情况才需要吊销一个未过期的证书。(当然我们用本测试 CA 时其时很少用到该命令,除非专门用于测试吊销证书的情况)

假设需要被吊销的证书文件为cert.pem,则执行以下命令吊销证书:

$ openssl ca -revoke cert.pem -config /etc/pki/tls/openssl.cnf

生成证书吊销列表文件(CRL)

准备公开被吊销的证书列表时,可以生成证书吊销列表(CRL),执行命令如下:

$ openssl ca -gencrl -out testca.crl -config /etc/pki/tls/openssl.cnf

还可以添加-crldays和-crlhours参数来说明下一个吊销列表将在多少天后(或多少小时候)发布。

可以用以下命令检查testca.crl的内容:

$ openssl crl -intestca.crl -text -noout

六、参考资料

How to create a self-signed SSL Certificatep

自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名

OpenSSL 生成证书链多级证书、证书吊销列表(CRL)

基于OpenSSL自建CA和颁发SSL证书

OpenSSL 与 SSL 数字证书概念贴

(完)

本文从

作者:舌尖上的大胖

发布的文章转载,感谢作者

链接:https://www.jianshu.com/p/e5f46dcf4664

推荐阅读更多精彩内容