Certificate 证书
如今密码学中最常用的一种形式就是公钥加密。公钥加密利用密码对:公开密钥和私有密钥。公钥系统的工作原理是使用公开密钥加密,密文只能通过私钥解密。
公钥系统的一个典型应用是SSL和TLS。譬如,Apache使用https,http over ssl,虽然http本身没有提供加密服务,但是https可以实现http流量的加密。
证书用来发布服务器的公钥和其它信息,以及对该证书负责的机构的信息。证书可以由CA签名。CA是验证了证书中包含信息正确性的可信第三方机构。
证书的类型
为了搭建使用公钥系统的安全服务器,在大多数情况下,需要将证书请求(包括公钥),公司分身的证明以及相应的费用提交给CA。CA验证证书请求和身份,发回安全服务器的证书。
或者,可以生成自签名的证书。当然,商业化的服务器是不推荐使用自签名证书的。
以HTTPS为例,CA签名的证书相比自签名的证书有两个好处:
1.浏览器自动验证了证书,并开始安全会话,而不需要用户处理;
2. CA发布的证书可以保证通信服务器的身份;
大多数支持SSL的浏览器和计算机都包含默认承认的CA列表。如果浏览器发现了一个证书的发布方CA不在自己的列表,就需要用户的干预。有的应用会直接报错。
从CA获得证书的过程很简单:
1. 生成公钥/私钥对;
2. 基于公钥生成证书请求,证书请求中包含服务器和公司信息;
3. 发送请求和必要的证明给CA。并按照他们的要求填表。
4. 若CA验证信息无误,会发送证书回来;
5. 将该证书安装到安全服务器上,并进行适当的配置。
生成证书签名请求CSR(Certificate Signing Request)
不论是从CA获得证书还是自签名证书,第一步都是生成密钥。
如果证书用于服务守护进程,例如Apache,Postfix,DoveCot,密钥最好不用密码短语加密。否则,每次启动,都需要输入密码短语。下面介绍生成有密码短语加密的和不用密码短语加密的证书。并用没有加密的密钥生成证书。不用密码短语的好处是方便,但是密钥的丢失导致服务器的沦陷。
使用如下命令生成CSR密钥:
openssl genrsa -des3 -out server.key 1024
提示时,输入密码短语;最好长度为8。使用des3的时候,密码短语长度最短为4个字符,(生成rsa私钥,并用des3加密;为何只生成了私钥呢?),包含数字和/或标点,并且不是字典中的单词。密码短语大小写敏感。
生成不带密码短语的不安全密钥:
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insure server.key
使用server.key生成CSR:
openssl req -new -key server.key -out server.csr
提示输入密码短语,然后各种公司信息,生成server.csr文件。将该csr提交给CA处理。或者,可以使用该CSR生成自签名的证书。(这一部分内容和实验内容不符~~)
生成自签名的证书
命令:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
安装证书
将server.key和server.crt安装到服务器上:
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private
然后只需要配置应用可以使用公钥加密,使用证书和密钥文件。(不明白~~;很明显的是,应用为啥会接受这个证书呢?另外,RSA的公钥在哪里呢?)
Certificate Authority
如果应用需要的不仅仅是自签名的证书,那么需要建立自己内部的CA。
1. 创建存放CA证书和其它文件的目录:
sudo mkdir /etc/ssl/cA
sudo mkdir /etc/ssl/newcerts
(这个也太不低调了,直接就存放在系统文件里~~)
2. CA需要文件来跟踪保存CA使用的序列号,每个证书都有唯一的序列号;以及CA发布的证书;
sudo sh -c "echo '01'>/etc/ssl/CA/serial"
sudo touch /etc/ssl/CA/index.txt
3. CA还需要一个配置文件,虽然不是必须的,但是在生成多个证书的时候会很方便。编辑/etc/ssl/openssl.cnf,在【CA_default】中修改:
dir = /etc/ssl/ # Where everything is kept
database = $dir/CA/index.txt # database index file.
certificate = $dir/certs/cacert.pem # The CA certificate
serial = $dir/CA/serial # The current serial number
private_key = $dir/private/cakey.pem# The private key
4. 生成自签名的根证书:
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
会要求输入证书的各种信息
5.安装根证书和密钥
sudo mv cakey.pem /etc/ssl/private
sudo mv cacert.pem /etc/ssl/certs
6. 现在可以给证书签名了,首先需要证书签名请求CSR。有了CSR使用如下命令生成CA签名的证书:sudo openssl ca -in server.csr -config /etc/ssl./penssl.cnf
在输入CA密钥的密码之后,会提示证书签名,并commit该新证书。
7. 这时会有新文件/etc/ssl/newcerts/01.pem,包含同样的输出。
8. 拷贝该证书到主机,并进行配置。默认的保存证书的位置是/etc/ssl/certs。这样,多个应用就可以使用这个证书。
(感觉还是不清楚~~)
目前觉得该文档的问题很多,但是有一些基本的概念如index.txt,serial它解释的还是挺清楚的~~
