134564 发表于 2014-11-28 09:38:53

OpenSSL配置Apache的https功能

https:会话建立过程
1.客户端和服务器端先三次握手
2.客户端发起请求,请求服务器端的443端口。
3.双方协商建立ssl会话
4.协商完成后,服务器发送自己的证书给客户端。
5.客户端拿到证书后,查看证书是不是受信任证书颁发机构颁发的,和验证证书是不是完整的。
6.客户端传递加密后的对称密码给服务器端。
连接建立完成


CA给客户端颁发证书过程
1.创建CA
   自己生成一对密钥
   生成自签名证书
2.客户端
    生成一对密钥
    生成证书颁发请求,.csr
    将请求发给CA
3.CA端
   签署此证书
   传送给客户端

注意:SSL仅能基于Ip地址进行,如果有多个虚拟主机的话,那么只能给其中一个加密

实验部分

查看httpd模块,确保有ssl,如果没有就手动安装
# httpd -M
ssl_module
查看ssl生成的文件
# rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf          #ssl主配置文件
/usr/lib/httpd/modules/mod_ssl.so   #安装了一个ssl模块
/var/cache/mod_ssl                  #ssl缓存目录

建立私有证书颁发机构
生成Ca的私钥
# cd /etc/pki/CA/
# (umask 077; openssl genrsa -out private/cakey.pem 2048)   
Generating RSA private key, 2048 bit long modulus
.....................................+++
.........................+++
e is 65537 (0x10001)
#


使用私钥生产自签名证书
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
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) :CN               #设置国家名称
State or Province Name (full name) :HB#设置省份名称
Locality Name (eg, city) :SJG             #设置市名称
Organization Name (eg, company) :BENET   #设置组织名称
Organizational Unit Name (eg, section) []:LB       #设置部门名称
Common Name (eg, your name or your server's hostname) []:www.benet.com   #设置主机名需要与颁发的主机名一直,不然会报证书不信任
Email Address []:ca@benet.com#设置电子邮件地址



编辑配置文件***的存放位置
# vim /etc/pki/tls/openssl.cnf
dir             = /etc/pki/CA


准备三个目录,证书颁发目录(certs),证书吊销(crl),刚生成的证书(newcerts)和颁发证书的序列号文件index.txt并且写入第一个证书序列号为01
# mkdir certs crl newcerts
# touch index.txt
# echo 01 > serial


这个时候CA就可以用了

web服务器配置
准备一个目录存储证书
# cd /etc/httpd/
# mkdir ssl
# cd ssl/


生成web的私钥证书
# (umask 077;openssl genrsa 1024 > httpd.key)
Generating RSA private key, 1024 bit long modulus
............++++++
..........................++++++
e is 65537 (0x10001)

生成证书签署请求
# openssl req -new -key httpd.key -out httpd.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) :CN
State or Province Name (full name) :HB
Locality Name (eg, city) :SJZ
Organization Name (eg, company) :BENET
Organizational Unit Name (eg, section) []:LB
Common Name (eg, your name or your server's hostname) []:www.benet.com#和网站的域名必须保持完全一致
Email Address []:aa@benet.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


CA服务器签署web服务器的证书
# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 365   
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
      Serial Number: 1 (0x1)
      Validity
            Not Before: Nov 26 10:42:56 2014 GMT
            Not After : Nov 26 10:42:56 2015 GMT
      Subject:
            countryName               = CN
            stateOrProvinceName       = HB
            organizationName          = BENET
            organizationalUnitName    = LB
            commonName                = www.benet.com
            emailAddress            = aa@benet.com
      X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                35:F3:EE:62:1F:64:D5:06:DB:5C:60:77:0B:19:33:C2:6A:8B:2D:B4
            X509v3 Authority Key Identifier:
                keyid:57:72:4C:91:1C:9B:F2:B0:E8:4A:E1:34:AB:03:E6:E6:31:2A:1D:C3

Certificate is to be certified until Nov 26 10:42:56 2015 GMT (365 days)
Sign the certificate? :y


1 out of 1 certificate requests certified, commit? y
Write out database with 1 new entries
Data Base Updated


查看颁发情况
# cat index.txt
V       151126104256Z         01      unknown /C=CN/ST=HB/O=BENET/OU=LB/CN=www.benet.com/emailAddress=aa@benet.com
查看下一个请求给的序列号
# cat serial
02


证书申请完毕

客户端配置ssl
配置之前先备份配置文件
# cd /etc/httpd/conf.d/
# cp ssl.conf ssl.conf.bak

编辑ssl配置文件,除了列出的需要设置,其他统统不管

ServerName www.benet.com#设置网站域名
DocumentRoot "/www/benet.com"#设置网站存放位置
ErrorLog logs/ssl_error_log   #设置网站错误日志
TransferLog logs/ssl_access_log #设置网站访问日志
LogLevel warn#设置警告级别
SSLEngine on#是否开启ssl功能
SSLProtocol all -SSLv2#支持的协议为,不支持sslv2,然后支持所有
SSLCertificateFile /etc/httpd/ssl/httpd.crt #设置证书文件位置
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key #设置私钥文件位置



编辑完成之后重新启动httpd服务,然后查看443端口已经启动了
# service httpd restart
# netstat -tnlp         
tcp      0      0 :::443                      :::*                        LISTEN      6436/httpd



这时客户端访问www.benet.com的443端口还是会报错,这时因为客户端不信任CA颁发机构
需要将/etc/pki/CA/cacert.pem文件复制到客户端

并且客户端改名为cacert.crt,然后安装证书,并且放到根颁发机构


这时客户端在访问就不会报错了,而且访问全部是加密的访问了


页: [1]
查看完整版本: OpenSSL配置Apache的https功能