zoukankan      html  css  js  c++  java
  • CentOS下配置Apache HTTPS

    一、安装Apache支持SSL/TLS

    yum install mod_ssl openssl
    

    二、创建证书

    证书(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通信,保证密码等个人信息传输时的安全。

    这里先说下证书相关的几个名词:

    RSA私钥能解密用证书公钥加密后的信息。通常以.key为后缀,表示私钥也称作密钥。是需要管理员小心保管,不能泄露的。

    CSR(Certificate Signing Request)包含了公钥和名字信息。通常以.csr为后缀,是网站向CA发起认证请求的文件,是中间文件。

    证书通常以.crt为后缀,表示证书文件。

    CA(Certifying Authority)表示证书权威机构,它的职责是证明公钥属于个人、公司或其他的组织。

    由于默认配置文件中证书名为localhost.crt和localhost.key,这里就按两个文件名生成。

    步骤1、生成私钥

    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

    三、配置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这一行就可以注释掉。

    • 如果是第三方签署的CA证书,按如下配置:
    • 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

    • 重启Apache
    • 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来验证

    curl https://localhost/ -k

    -k参数的意思是允许不验证访问SSL站点,因为如果要验证,就不能使用localhost做测试,而只能用生成证书时明确指定的域名。

    • 使用浏览器

    访问服务器时输入https://域名(或IP),浏览器会弹出安装服务器证明书的窗口。说明服务器已经支持SSL了。

    四、其它知识点

    在上面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地址和端口的请求。

     

  • 相关阅读:
    USACO Milk2 区间合并
    Codeforces 490B Queue【模拟】
    HDU 3974 Assign the task 简单搜索
    HDU 5119 Happy Matt Friends(2014北京区域赛现场赛H题 裸背包DP)
    Cin、Cout 加快效率方法
    POJ 1159 回文LCS滚动数组优化
    POJ 2479 不相交最大子段和
    POJ 1458 最长公共子序列 LCS
    在阿里最深刻的,还是职场之道给我的震撼
    精细化
  • 原文地址:https://www.cnblogs.com/jinxiblog/p/7911208.html
Copyright © 2011-2022 走看看