一、如何实现openssl生成CA证书并给指定主机颁发证书

  客户端client(也可以是提供某种服务的服务器)     服务器端server
 
 
1.在服务器端server操作
首先在一台服务器上制作一个CA,然后服务器先给自己颁发一个证书
 
在Linux中,CA的相关配置信息在/etc/pki/目录下
/etc/pki/目录下有CA、nssdb、 rpm-gpg、 tls四个文件。
 
配置CA的相关信息要先切换CA目录下:
#cd /etc/pki
#cd CA
由于ssl所依赖的配置文件在tls目录(绝对路径是/etc/pki/tls)下面,所以要切换进去,做以下操作
#cd /tls   其中的openssl.conf 就是openssl的配置文件
#vim openssl.conf  
[ CA_default ]
 
dir             = ../../CA              # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
 
编辑它,将“dir   = ../../CA ” 目录改为“ dir  =/etc/pki/CA ” 目的是使用CA的绝对路径。
 
再切换到CA目录中:#cd../CA/
#(umask 077; openssl genrsa 2048 > private/cakey.pem) 首先生成一对密钥,为了安全起见,并将其权限设置为600,
注意:在redhat中,此时放在private/目录下的必须是cakey.pem,不能为其他名称的文件。
#ls -l private/
服务器Server首先发出申请证书请求:这里是服务器自己请求,然后自己签发CA证书给自己。
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3656
然后会提示输入申请证书者的信息
County Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:Henan
Locality Name (eg,city) [Newbury]:ZZ
Organization Name (eg,company) [My Company Ltd]:magedu
Organization Unit Name (eg,section) []:tech
Common Name (eg,your name or your server's hostname) []:此处要写自己CA服务器的名字,比如ca.magedu.com
Email Address []:ca@magedu.com
2、在客户端Client上操作
首先查看自己的主机名称,假如你的主机名称为www.magedu.com,可以自己修改主机名称,命令为:#hostname XXX.XXX
假如你想在自己的主机上提供http服务,必须先申请一个证书,过程如下:
#mkdir /etc/httpd
#cd /etc/httpd
#ls
#mkdir ssl
#cd ssl/
#ls
#(umask 077; openssl genrsa 1024 > httpd.key)   生成一对密钥,为了安全起见给它600权限。
#ll  此时密钥已经生成了
#openssl req -new -key httpd.key -out httpd.csr  发出让CA为自己颁发证书的请求
会出现以下信息让你输入:
 
County Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:Henan
Locality Name (eg,city) [Newbury]:ZZ
Organization Name (eg,company) [My Company Ltd]:magedu
Organization Unit Name (eg,section) []:tech
Common Name (eg,your name or your server's hostname) []:www.magedu.com 
Email Address []:www@magedu.com
然后会提示你输入密码,这个密码是访问证书签署请求的密码,CA在签署证书的时候要获取这段密码才能
签署请求,所以为了不让CA在签署证书的时候不用输入密码就能签署,这里的密码也可以留空。
 
#ls
将生成的httpd.csr发给CA,让其签署:CA确认你的信息准确并符合申请证书时的信息后,就签发证书给你
将签好的证书拷贝到自己主机上,就可以使用了。
#scp httpd.csr 172.16.100.1:/tmp   将生成的httpd.csr发给CA,让其签署 
 
3、再回到服务器server主机上:
 
此时还需要在CA服务器上的/etc/pki/CA/目录下还需要生成几个空目录和空文件:
生成空目录:
#mkdir certs crl newcerts
certs        证书目录
crl          证书吊销列表目录
newcerts     新证书目录
生成两个空文件
#touch index.txt serial
index.txt   证书的索引文件
serial      证书的序列号文件
#echo 01 > serial   给其一个初始序列号01
此时CA已经完整了。
然后为客户端Client 的请求签署证书
#cd /tmp
#ls
#openssl ca -in httpd.csr -out httpd.crt
#y       此处是询问服务器是否要为其签署证书,输入y即可
#enter
#y       确认为Clinet签署证书,输入y
#enter
 
#ls         
此时会有httpd.crt httpd.csr buildscript 三个文件
 
4、再回客户端Client主机上
在ssl/目录下执行以下命令:
#scp 172.16.100.1:/tmp/httpd.crt ./   将证书再从服务器server上拷贝到当前目录
#ls
会有这些文件 :httpd.crt httpd.csr httpd.key
 
5.如果想吊销某个主机的证书,可以使用吊销证书命令。
注意:吊销证书命令必须在服务器server主机中执行才可以:
#openssl ca -revoke httpd.crt     httpd.crt 为证书名称