1、安装Apache支持SSL/TLS算法
yum install mod_ssl openssl
2、建立证书apache
证书(Cerificate)的基本做用是将一个公钥和安全个体(我的、公司、组织等)的名字绑定在一块儿。浏览器
通常状况下,制做证书要通过几个步骤,如上图所示。首先用openssl genrsa生成一个私钥,而后用openssl req生成一个签署请求,最后把请求交给CA,CA签署后就成为该CA认证的证书了。若是在第二步请求时加上-x509参数,那么就直接生成一个self-signed的证书,即本身充当CA认证本身。安全
除了这种方式外,在Debian或者Ubuntu系统中有更加简便的方法制做self-signed证书使用make-ssl-cert命令。该命令在ssl-cert的包里,通常会伴随着Apache的安装而安装,可能单独安装也能够。服务器
若是您只是想作一张测试用的电子证书或不想花钱去找个 CA 签署,您能够造一张自签 (Self-signed) 的电子证书。固然这类电子证书没有任何保证,大部份软件偶到这证书会发出警告,甚至不接收这类证书。 使用自签名(self-signed)的证书,它的主要目的不是防伪,而是使用户和系统之间可以进行SSL通讯,保证密码等我的信息传输时的安全。curl
这里先说下证书相关的几个名词:ide
RSA私钥能解密用证书公钥加密后的信息。一般以.key为后缀,表示私钥也称做密钥。是须要管理员当心保管,不能泄露的。测试
CSR(Certificate Signing Request)包含了公钥和名字信息。一般以.csr为后缀,是网站向CA发起认证请求的文件,是中间文件。网站
证书一般以.crt为后缀,表示证书文件。编码
CA(Certifying Authority)表示证书权威机构,它的职责是证实公钥属于我的、公司或其余的组织。
因为默认配置文件中证书名为localhost.crt和localhost.key,这里就按两个文件名生成。
步骤一、生成私钥
1 cd /etc/pki/tls/private/ 2 3 openssl genrsa -des3 -out localhost.key 1024
注:生成私钥,须要提供一个至少4位的密码
采用DES3加密新产生的私钥localhost.key文件,每次要使用这个私钥时都要用输入密码。若是您的电子证书是用在apache等服务器中,您每次启动服务器时都要输入密码一次,咱们能够在生成证书请求文件后,删除私钥的密码。
1 cp localhost.key localhost.key.org 2 openssl rsa -in localhost.key.org -out localhost.key
1 openssl genrsa -out localhost.key 1024
注:采用128位rsa算法生成密钥localhost.key文件,这种方法产生的证书在apache等服务器中启动服务器时不会要求输入密码,同时也不会把私钥加密。
步骤2: 生成证书请求文件(Certificate Signing Request)
1 openssl req -new -key localhost.key -out localhost.csr
注:这是用步骤1的密钥生成证书请求文件localhost.csr, 这一步输入内容和建立自签名证书的内容相似,按要求输入就能够了。
步骤3: 签署生成证书
您只要把localhost.csr这个档案给第三方CA(Certificate Authority)机构签署生成证书就能够了。
1 openssl x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt
3、配置Apache
开启apache 的LoadModule ssl_module modules/mod_ssl.so 模块
开启apache配置文件的 Include conf/extra/httpd-ssl.conf
ssl配置文件在/etc/httpd/conf.d/ssl.conf,默认就行,不须要更改。
这里看下证书及密钥的默认位置
1 cat /etc/httpd/conf.d/ssl.conf 2 3 SSLCertificateFile /etc/pki/tls/certs/localhost.crt 4 5 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
配置虚拟主机
编辑ssl.conf文件,加入证书对应的主机头。
1 vi /etc/httpd/conf.d/ssl.conf 2 3 ServerName www.example.com
配置SSL证书
编辑配置文件,修改以下几行:
1 vi /etc/httpd/conf.d/ssl.conf 2 3 SSLEngine on 4 5 SSLCertificateFile /etc/pki/tls/certs/localhost.crt 6 7 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
注:若是SSLCertificateFile中指定的证书已包含相应私钥,SSLCertificateKeyFile这一行就能够注释掉。
1 SSLEngine on 2 3 SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem 4 5 SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key 6 7 SSLCertificateChainFile /etc/ssl/certs/server-ca.crt
各指令含义:
SSLEngine :这个指令用于开启或关闭SSL/TLS协议引擎。
SSLCertificateFile:该指令用于指定服务器持有的X.509证书(PEM编码),其中还能够包含对应的RSA或DSA私钥。若是其中包含的私钥已经使用密语加密,那么在Apache启动的时候将会提示输入密语。
SSLCertificateKeyFile:指定了服务器私钥文件(PEM编码)的位置。若是SSLCertificateFile指定的服务器证书文件中不包含相应的私钥,那么就必须使用该指令,不然就不须要使用。
SSLCertificateChainFile:这个指令指定了一个多合一的CA证书,用于明确的建立服务器的证书链。这个证书链将被与服务器证书一块儿发送给客户端,由直接签发服务器证书的CA证书开始,按证书链顺序回溯,一直到根CA的证书结束,这一系列的CA证书(PEM格式)就构成了服务器的证书链。这有利于避免在执行客户端认证时多个CA证书之间出现混淆或冲突。
测试Apache HTTPS
1 /etc/init.d/httpd restart
注:若是有设置的私人密钥的密码,则会要求输入。
Apache/2.2.21 mod_ssl/2.2.21 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Server www.example.com:443 (RSA)
Enter pass phrase:
OK: Pass Phrase Dialog successful.
curl https://localhost/ -k
-k参数的意思是容许不验证访问SSL站点,由于若是要验证,就不能使用localhost作测试,而只能用生成证书时明确指定的域名。
访问服务器时输入https://域名(或IP),浏览器会弹出安装服务器证实书的窗口。说明服务器已经支持SSL了。
4、其它知识点
在上面SSL站点配置文件中所使用的是”default“(默认虚拟主机),下面说下相关的知识点。
“default“(默认虚拟主机)虚拟主机能够捕获全部指向没指定的IP地址和端口的请求。好比:一个没被任何虚拟主机使用的地址/端口对。
仅当没有其余虚拟主机符合客户端请求的IP地址和端口号时,”default“虚拟主机才会捕获这个请求。而且仅当”default“虚拟主机的端口号(默认值由您的Listen指定)与客户端发送请求的目的端口号相符时,这个请求才会被捕获。也可使用通配符(例如:”default:*”)来捕获任何端口号的请求。
服务器配置示例:
1 <VirtualHost _default_:443> 2 3 DocumentRoot /www/default 4 5 ...... 6 7 </VirtualHost>
这段配置内容的意思是全部访问这个WEB服务器的443端口的请求会被这个默认虚拟主机处理。
另外仅当客户端链接的目的IP地址和端口号没有指定并且不与任何一个虚拟主机(包括”default“虚拟主机)匹配的时候,才会用主服务器来伺服请求。换句话说,主服务器仅捕获没有指定IP地址和端口的请求。