三台Linux服务器:
web服务器:192.168.1.10
CA服务器:192.168.1.20
客户机
web网站把公钥发给CA认证服务器,CA用私钥给web公钥签名。然后把签名完的公钥再发给 web服务器
一般 .Key结尾的是私钥
.Csr结尾的是公钥
.Crt结尾的是CA签名完的公钥证书
[[email protected] private]# gpg --gen-key
注意:RSA密钥长度为 1024-4096(默认为2048)
一、WEB服务器生成密钥对
1、生成私钥
#cd /etc/pki/tls/private
#openssl genrsa 2048 > www.key //生成私钥文件
2、根据私钥生成证书请求文件
#openssl req -new -key www.key > ~/www.csr //用私钥生成公钥
提示的问题中,国家/组织与根证书保持一致(根证书位置:/etc/pki/tls/openssl.cnf)
。。。。。。 。。。。。。。
CountryName (2 letter code) [XX]:CN //写CA服务器主配置文件里填写的“国家” CN=中国
Stateor Province Name (full name) []:Beijing //写CA服务器主配置文件里填写的“省/市”
LocalityName (eg, city) [Default City]:Beijing //写CA服务器主配置文件里填写的“省”
OrganizationName (eg, company) [Default Company Ltd]:Dave Company Ltd //写CA服务器主配置文件里填写的“公司名”
OrganizationalUnit Name (eg, section) []: //部门名称,可回车
CommonName (eg, your name or your server‘s hostname) []:www.dave.com //写web服务器域名
EmailAddress []:[email protected] //写维护人员的邮箱
Pleaseenter the following ‘extra‘ attributes
to besent with your certificate request
Achallenge password []: //回车
Anoptional company name []: //回车
[[email protected]]#
二、把CSR文件上传至CA服务器
1、把web服务器生成的公钥发给CA服务器 ,位置随便
# scp www.csr 192.168.1.20:/root/ //上传到CA服务器
2、在CA服务器的/root目录下查看csr文件内容
# openssl req -in www.csr -text -noout
三、CA服务器签发证书(CA服务搭建需事先做好)
1、签发证书
# openssl ca -in www.csr -out www.crt //CA服务器给web公钥签名,生成www.crt 公钥认证文件名 随便起,以.crt结尾
Usingconfiguration from /etc/pki/tls/openssl.cnf
Enterpass phrase for /etc/pki/CA/private/s.key: //此处要输入CA服务器的私钥密码(123456),写配置CA服务器创建私钥s.key的密码 ---用CA服务器的私钥s.key给web服务器公钥签名,生成www.crt
Checkthat the request matches the signature
Signatureok
CertificateDetails:
Serial Number: 8 (0x8)
Validity
Not Before: Mar 20 23:54:19 2014GMT
Not After : Mar 20 23:54:19 2015GMT
Subject:
countryName = CN
stateOrProvinceName = Beijing
organizationName = Dave Company Ltd
commonName = www.dave.com
emailAddress = [email protected]
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
23:06:C0:53:BB:7D:75:11:F1:6D:BF:30:2E:0B:13:79:26:E8:49:E9
X509v3 Authority Key Identifier:
keyid:0B:97:E6:9D:83:31:38:A1:14:62:AC:29:4C:DE:6A:01:55:15:33:4C
Certificateis to be certified until Mar 20 23:54:19 2015 GMT (365 days)
Sign thecertificate? [y/n]:y //确定以上内容是否正确
1 out of1 certificate requests certified, commit? [y/n]y //确定以上内容是否正确
Writeout database with 1 new entries
DataBase Updated
2、验证
# cat /etc/pki/CA/index.txt
# cat /etc/pki/CA/serial
# ls /etc/pki/CA/newcerts
# openssl x509 -in ~/www.crt -text -noout //查看crt文件内容
四、WEB服务器下载证书并且布署
1、CA服务器签名完生成的www.crt公钥认证,再发给web服务器
[[email protected]~]# scp www.crt [email protected]:/root/ //CA服务器上操作,上传到WEB服务器
2、将CA发过来的证书拷贝到/etc/pki/tls/certs
[[email protected]~]# cp www.crt /etc/pki/tls/certs/ //WEB服务器上操作
3、在web服务器上安装mod_ssl模块
# rpm -qa |grep mod_ssl
# yum -y install mod_ssl //默认在/etc/httpd/conf.d/ssl.conf下生成ssl主配置文件,生成套接 层,https默认监听TCP 443端口
4、编辑配置文件
# vi /etc/httpd/conf.d/ssl.conf
105 SSLCertificateFile /etc/pki/tls/certs/www.crt //填写公钥认证的路径
112 SSLCertificateKeyFile /etc/pki/tls/private/www.key //填写私钥的路径
5、重启web服务器
# service httpd restart
6、当访问http协议时,自动跳转到https
在/etc/httpd/conf.d/ssl.conf中加入如下三行,作用是客户端访问http80端口自动跳转 到https443端口,注意这三行必须写在所有容器外,就是放在配置文件最后
vi /etc/httpd/conf.d/ssl.conf
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
五、测试linux客户端访问
1、客户端必须写hosts文件,或DNS解析
# cat /etc/hosts
192.168.1.10 www.dave.com
2、浏览器访问:http://www.dave.com // 提示证书不受信任,因为客户端没有信任CA
3、客户端将CA的根证书安装上,再次访问就不会再有提示
http://192.168.1.20/my-ca.crt //从CA服务器下载根证书,要先把my-ca.crt拷到http路 径/var/www/html/下
若没有自动弹出“下载证书”窗口,就按如下操作
查看证书
win7客户端访问:
打开C:\Windows\System32\drivers\etc\hosts,在未尾添加:192.168.1.10 www.dave.com
未下载证书,访问http://www.dave.com ,显示如下
下载证书:http://192.168.1.20/my-ca.crt
运行→ 安装→
再访问:http://www.dave.com →可以直接显示网页内容