-
https 配置
http over ssl = https 443/tcp
ssl: v3
tls: v1
https://
-
SSL会话的简化过程
-
客户端发送可供选择的加密方式,并向服务器请求证书;
-
服务器端发送证书以及选定的加密方式给客户端;
-
客户端取得证书并进行证书验正:
-
如果信任给其发证书的CA:
-
验正证书来源的合法性;用CA的公钥解密证书上数字签名;
-
验正证书的内容的合法性:完整性验正
-
检查证书的有效期限;
-
检查证书是否被吊销;
-
证书中拥有者的名字,与访问的目标主机要一致;
-
客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
-
服务用此密钥加密用户请求的资源,响应给客户端;
注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;
回顾几个术语:PKI,CA,CRL,X.509 (v1, v2, v3)
-
配置httpd支持https:
-
为服务器申请数字证书;
-
测试:通过私建CA发证书
-
创建私有CA
-
查看配置文件
[root@repo conf]# cat /etc/pki/tls/openssl.cnf | sed ‘/^\[[[:space:]]CA_default/,/# Comment out/p’ –n
-
创建序列号
[root@repo CA]# touch index.txt
[root@repo CA]# echo 01 > serial
[root@repo CA]# ls
certs crl index.txt newcerts private serial
[root@repo CA]# cat serial
01
-
创建ca证书
[root@repo CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
[root@repo CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3560 -out /etc/pki/CA/cacert.pem
-
在服务器创建证书签署请求
-
创建服务器私钥
[root@mx2 ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/ns2.cpe.com.key 2048)
-
生成服务器签署请求
[root@mx2 ssl]# openssl req -new -key ns2.cpe.com.key -days 365 -out ns2.cpe.com.csr
-
上传到ca服务器
[root@mx2 ssl]# scp ns2.cpe.com.csr root@172.16.31.125:/etc/pki/CA/certs/ns2.cpe.com.csr
-
CA签证
[root@repo certs]# openssl ca -in ns2.cpe.com.csr -out /etc/pki/CA/certs/ns2.cpe.crt
[root@repo certs]# scp ns2.cpe.crt root@172.16.31.124:/etc/httpd/ssl/ns2.cpe.crt
ns2.cpe.crt
-
配置httpd支持使用ssl,及使用的证书;
-
查看mod_ssl是否安装
[root@mx2 conf.d]# httpd -M | grep “ssl”
-
安装mod_ssl
-
[root@mx2 ssl]# yum -y install mod_ssl
-
配置ssl.conf
[root@mx2 conf.d]# vim ssl.conf
[root@mx2 conf.d]# cat ssl.conf | sed ‘/^#/d’ | sed ‘/^$/d’
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost 172.16.31.124:443>
DocumentRoot “/var/www/html”
ServerName ns2.cpe.com:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/httpd/ssl/ns2.cpe.crt
SSLCertificateKeyFile /etc/httpd/ssl/ns2.cpe.com.key
<Files ~ “\.(cgi|shtml|phtml|php3?)$”>
SSLOptions +StdEnvVars
</Files>
<Directory “/var/www/cgi-bin”>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch “MSIE [2-5]” \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”
</VirtualHost>
-
重启并查看mod_ssl是否成功加载
[root@mx2 conf.d]# systemctl restart httpd
[root@mx2 conf.d]# httpd -M | grep “ssl”
ssl_module (shared)
-
客户端安装ca证书
# yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile
-
测试基于https访问相应的主机;
浏览器浏览:
# openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
[root@repo CA]# openssl s_client -connect 172.16.31.124:443 -CAfile /etc/pki/CA/cacert.pem