Ubuntu下布置Apache HTTPS

1、演示环境:

免费SSL证书现在已经差不多是“习以为常”了,几年前购买一个SSL证书成本是相当高昂的,而使用SSL证书的网站则一般会被路人和搜索引擎“高看一眼”。现在免费SSL也是非常流行了,常见的主要有:Let’s
Encrypt、StartSSL、CloudFlare
SSL、沃通免费SSL等等。

在设置Apache + SSL之前, 需要做:

 一、创建证书

192.168.1.145:CentOS
6.9 x86_64,Apache服务器

如果你对SSL证书的安全性要求比较高的话,可以试着购买付费的SSL证书,毕竟现在的SSL证书价格也很“平民”了,像Namecheap
SSL最便宜的一年也就是十几块钱,非常划算。不过,想在国内购买SSL证书貌似可选择的不是很多,就连阿里云的SSL证书居然是和沃通SSL证书合作的。

安装Apache, 下载安装Apache时请下载带有ssl版本的Apache安装程序.

  证书(Cerificate)的基本作用是将一个公钥和安全个体(个人、公司、组织等)的名字绑定在一起。

192.168.1.146:CentOS 7.4
x86_64,私建的CA服务器

对于一个小博客来说,付费购买SSL证书无形当中会增加建站成本,再加上现在免费SSL证书也基本上能够满足日常的安全保障需要,本着节约的原则,还是选择了免费的SSL证书,我采用的是腾讯云DV
SSL证书,免费一年。

并且ssl需要的文件在如下的位置:

图片 1

备注:Apache和CA可以位于同一台服务器

1、用你的腾讯云账号进入SSL证书管理中心,点击“申请证书”。

 

  一般情况下,制作证书要经过几个步骤,如上图所示。首先用openssl
genrsa生成一个私钥,然后用openssl
req生成一个签署请求,最后把请求交给CA,CA签署后就成为该CA认证的证书了。如果在第二步请求时加上-x509参数,那么就直接生成一个self-signed的证书,即自己充当CA认证自己。

2、192.168.1.145安装httpd服务,并启动:

图片 2

   
[Apache安装目录]/modules/ mod_ssl.so

  除了这种方式外,在Debian或者Ubuntu系统中有更加简便的方法制作self-signed证书使用make-ssl-cert命令。该命令在ssl-cert的包里,一般会伴随着Apache的安装而安装,可能单独安装也可以。

# yum -y install
httpd  –>  版本:httpd-2.2.15

2、然后,你会看到“免费版GeoTrust DV SSL证书”,点击“确定”。

 
  [Apache安装目录]/bin/ openssl.exe, libeay32.dll, ssleay32.dll,
openssl.cnf

  如果您只是想做一张测试用的电子证书或不想花钱去找个 CA
签署,您可以造一张自签 (Self-signed)
的电子证书。当然这类电子证书没有任何保证,大部份软件偶到这证书会发出警告,甚至不接收这类证书。
使用自签名(self-signed)的证书,它的主要目的不是防伪,而是使用户和系统之间能够进行SSL通信,保证密码等个人信息传输时的安全。

# cd
/etc/httpd/conf

图片 3

 
  [Apache安装目录]/conf/ openssl.cnf

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

# cp httpd.conf
httpd.conf.bak

3、接着,会要求填写申请SSL证书的域名、证书备注名等。

 

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

# vim httpd.conf 
–>  ServerName localhost:80

图片 4

创建SSL证书(注意,我下载的是PHPStudy里面自带了openssl,但是bin目录下没有openssl.cnf,需要将conf下的openssl.cnf拷贝一份到bin目录下,但总体原理一样)

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

# service httpd
start

4、腾讯云会要求你验证域名所有权,提供了两种方式,一种是DNS,一种是邮箱,最快捷的方便的自然是选择邮箱验证了。

打开CMD,进入到Apache安装目录下的bin目录下:

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

# ss -tnl | grep
:80

图片 5

如果DOS命令进入目前

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

3、创建虚拟主机页面存放目录及测试页:

5、到你的域名邮箱中收取验证邮件,验证通过后证书会自动进入审核阶段。

图片 6

  1、制作自签名证书

# mkdir -pv
/web/vhosts/htdocs

图片 7

 

  通过make-ssl-cert创建自签名证书

# cd
/web/vhosts/htdocs

6、下载得到的 ***.com.zip
文件,解压获得3个文件夹,分别是Apache、IIS、Nginx 服务器的证书文件,

步骤一:

  如果没安装这个工具,先用以下命令安装。

# vim index.html 
–>  <h3>Index Page</h3>

下面将介绍在Apache中配置支持HTTPS:

       执行命令:openssl
genrsa 1024 >tian_server.key

# vim test.html 
–>  <h3>Test Page</h3>

  • 获取证书
    Apache文件夹内获得证书文件 1_root_bundle.crt,2_.crt
    和私钥文件 3_
    .key,
    1_root_bundle.crt 文件包括一段证书代码 “—–BEGIN
    CERTIFICATE—–”和“—–END CERTIFICATE—–”,
    2 \**.crt 文件包括一段证书代码 “—–BEGIN
    CERTIFICATE—–”和“—–END CERTIFICATE—–”,
    3\**.key 文件包括一段私钥代码“—–BEGIN RSA PRIVATE
    KEY—–”和“—–END RSA PRIVATE KEY—–”。

  • 证书安装
    编辑Apache根目录下 conf/httpd.conf 文件,找到
    #LoadModule ssl_module modules/mod_ssl.so#Include conf/extra/httpd-ssl.conf,去掉前面的#号注释;如果尚未安装OpenSSL,它可以使用yum来安装,yum install mod_ssl openssl,安装完毕后,会自动生成
    /etc/httpd/conf.d/ssl.conf
    文件!将上述两个文件引入到httpd.conf文件中;编辑Apache根目录下
    conf/httpd-ssl.conf 或者 conf.d/ssl.conf文件,修改如下内容:

 

  make-ssl-cert生成证书的方法有两种,一种是根据生成按工具默认的方式生成,一种是按模板文件生成。

4、创建基于主机名的虚拟主机:

     
 (RSA密钥对的默认长度是1024,取值是2的整数次方,并且密钥长度约长,安全性相对会高点)。 

#默认的方式生成
make-ssl-cert generate-default-snakeoil

# vim
/etc/httpd/conf/httpd.conf,末尾新增如下代码:

<VirtualHost ***:443>
    DocumentRoot "***"
    ServerName ***
    SSLEngine on
    SSLCertificateFile ***.crt
    SSLCertificateKeyFile ***.key
    SSLCertificateChainFile ***.crt
</VirtualHost>

      完成密钥server.key生产完毕后进行步骤二操作。

注:默认方式生成的公钥(证书)在/etc/ssl/certs/ssl-cert-snakeoil.pem,私钥在/etc/ssl/private/ssl-cert-snakeoil.key。

图片 8

配置完成后,重新启动 Apache 就可以使用https来访问了。

 

# service httpd
reload

注:

步骤二:

  这里生成的证书采用pem格式,这个pem格式档案中包含了私钥和公钥(证书)两部分内容。

5、以管理员权限运行notepad,修改本地Windows 10的C:\Windows\System32\drivers\etc\hosts文件,末尾新增代码:192.168.1.145
web.vhosts.com,保存修改后访问测试页

配置文件参数 说明
SSLEngine on 启用SSL功能
SSLCertificateFile 证书文件
SSLCertificateKeyFile 私钥文件
SSLCertificateChainFile 证书链文件

        生产为签署的server.csr

  注:在要求输入Common Name(eg, YOUR name)时,输入你的主机名。Common
Name必须和httpd.conf中server
name必须一致,否则apache不能启动。启动apache时错误提示为:RSA server
certificate CommonName (CN) `Koda’ does NOT match server name!? 。
    make-ssl-cert是只能由root执行的命令。

图片 9

       继续在bin目录下执行命令:

  通过openssl命令行创建自签名证书

图片 10

     openssl
req -new -config openssl.cnf -key tian_server.key
>tian_server.csr

  这里生成的证书也采用pem格式,这个pem格式档案中包含了私钥和公钥(证书)两部分内容。如果你将keyout和out分别采用不同的文件名,那keyout和out所对应的文件就会分别存放私钥和公钥(证书)。

图片 11

 

 

       (如果不加-config .openssl.cnf参数的话,常会报Unable to load
config info from …/ssl/openssl.cnf)

  注:在要求输入Common Name(eg, YOUR name)时,输入你的主机名。Common
Name必须和httpd.conf中server name必须一致。

6、192.168.1.146创建私有CA:

        之后就会要求输入一系列的参数:

  2、制作需CA(Certificate Authority)签署证书

(1)安装相关软件包:# yum -y install openssl
openssh-clients

Country Name (2 letter code) [AU]:CN ISO 国家代码(只支持两位字符)
    State or Province Name (full name) [Some-State]:GD 所在省份
    Locality Name (eg, city) []:GZ 所在城市
    Organization Name (eg, company): 公司名称
    Organizational Unit Name (eg, section) []: 组织名称
    Common Name (eg, YOUR name) []: 申请证书的域名(建议和httpd.conf中serverName必须一致)
    Email Address []:admin@admin.com 管理员邮箱
    Please enter the following ‘extra’ attributes to be sent with your
certificate request A challenge password []: 交换密钥 (随意写)
    An optional company name []:(建议和httpd.conf中serverName必须一致)  

  步骤1、生成私钥

备注:OpenSSL的配置文件是/etc/pki/tls/openssl.cnf,此处无需修改,使用默认配置即可

 

(2)创建保存证书信息的数据库文件:# touch
/etc/pki/CA/index.txt

注:Common
Name建议和httpd.conf中serverName必须一致,否则有可能导致apache不能启动(启动
apache 时错误提示为:server RSA certificate CommonName (CN) `Kedou’
does NOT match server name!? )   

  注:采用DES3加密新产生的私钥server.key文件,每次要使用这个私钥时都要用输入密码。如果您的电子证书是用在apache等服务器中,您每次启动服务器时都要输入密码一次。

(3)创建保存证书序列号的文件:# echo 01 >
/etc/pki/CA/serial

    完成签署的server.csr配置。

(4)生成私钥cakey.pem:# (umask 077; openssl
genrsa -out /etc/pki/CA/private/cakey.pem 2048)

 

  注:采用128位rsa算法生成密钥server.key文件,这种方法产生的证书在apache等服务器中启动服务器时不会要求输入密码,同时也不会把私钥加密。

图片 12

步骤三:

  步骤2: 生成证书请求文件(Certificate Signing Request)

备注:genrsa子命令常用选项

  
    签署服务器证书文件
server.crt

  • genrsa:用于生成RSA密钥对的OpenSSL子命令

  • -out
    cakey.pem:私钥保存位置

  • 2048:密钥长度,也可以使用1024或4096

  
    在
bin/目录下执行命令:

  注:这是用步骤1的密钥生成证书请求文件server.csr,
这一步输入内容和创建自签名证书的内容类似,按要求输入就可以了。

更多genrsa子命令选项可查看:# man genrsa

 openssl
req -x509 -days 5000 -config openssl.cnf -key tian_server.key -in
tian_server.csr >tian_server.crt

  步骤3: 签署生成证书

(5)生成CA证书cacert.pem:

 

  您只要把server.csr这个档案给第三方CA(Certificate
Authority)机构签署生成证书就可以了。

# openssl req -new
-x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out
/etc/pki/CA/cacert.pem

  
    说明:这是用步骤
1,2 的的密钥和证书请求生成证书 server.crt,-days 参数
指明证书有效期,单位为天,x509 表示生成的为 X.509 证书。

图片 13

图片 14

步骤四:

其中ca.keyso.com为证书颁发者

  
    在bin
目录下,找到tian_server.crt、tian_server.csr、tian_server.key三个文件,将此三个文件剪切到Apache的conf目录下。

备注:req子命令常用选项

步骤五:

  • req:用于证书签署请求和证书生成的OpenSSL子命令

  • -new:生成新证书签署请求

  • -x509:专用于CA生成自签证书

  • -key
    cakey.pem:生成CA证书请求时用到的私钥

  • -days
    7300:证书的有效期限为20年

  • -out
    cacert.pem:证书的保存路径

  
    配置
httpd.conf. 在Apache的conf\extra目录下的 httpd_ssl.conf 文件是关于 ssl
的配置,是httpd.conf的一 部分。

更多req子命令选项可查看:# man req

  
    在
httpd.conf 中下列两行:去掉前面的“#”

 

  
 

7、192.168.1.145生成证书签署请求文件并发送至192.168.1.146:

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

(1)安装相关软件包:# yum -y install
openssh-clients

  
 

(2)创建用于存放密钥的目录:# mkdir -pv
/etc/httpd/ssl

 

(3)生成私钥web-vhosts-com.key:# (umask 077; openssl
genrsa -out /etc/httpd/ssl/web-vhosts-com.key 2048)

步骤六:

图片 15(4)生成证书签署请求文件web-vhosts-com.csr:

  (注意:相同部分被省略掉)

# openssl req -new
-key /etc/httpd/ssl/web-vhosts-com.key -days 7300 -out
/etc/httpd/ssl/web-vhosts-com.csr

# General setup for the virtual host
  DocumentRoot “D:/PHPStudy/WWW/”(这个地方网页根目录)
  ServerName  phpssl.com:443
  ErrorLog “D:/PHPStudy/Apache/logs/no-robots_error.log.txt”(具体的服务器上的地址)
  TransferLog “D:/PHPStudy/Apache/logs/no-robots_access.log.txt”(具体的服务器上的地址)
   
  SSLCertificateFile “D:/PHPStudy/Apache/conf/tian_server.crt”

图片 16其中web.vhosts.com为证书颁发的对象

  SSLCertificateKeyFile “D:/PHPStudy/Apache/conf/tian_server.key”
 
  CustomLog “D:/PHPStudy/Apache/logs/ssl_request.log”
\
          “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”

(5)将证书签署请求文件web-vhosts-com.csr发送至192.168.1.146:

 

# scp
/etc/httpd/ssl/web-vhosts-com.csr
root@192.168.1.146:/etc/pki/CA/certs

以上最容易出问题的地方是http_ssl.conf中的日志等路径问题,建议按照物理路径进行设置

8、192.168.1.146签署证书并发还给192.168.1.145:

步骤八:

(1)签署证书:

调试运行Apache,对于Apache。如果是集成板的如xampp,wampserver,或者phpstudy启动Apache
Server,可能我们不知道我们的服务器出现了什么问题,建议查看
Apache/logs下的日志,在此基础上,配合Cmd命令行在bin目录下运行httpd命令,如果不报错,说明服务器运行没问题,否则更具提示修改��题

# openssl ca -in
/etc/pki/CA/certs/web-vhosts-com.csr -days 7300 -out
/etc/pki/CA/certs/web-vhosts-com.crt

 

图片 17备注:ca子命令常用选项

图片 18

  • ca:用于签署证书请求的OpenSSL子命令

  • -in
    web-vhosts-com.csr:证书签署请求文件路径

  • -days
    7300:证书的有效期限为20年

  • -out
    web-vhosts-com.crt:证书的保存路径

 

更多ca子命令选项可查看:# man ca

如果出现

图片 19(2)将证书web-vhosts-com.crt发还给192.168.1.145:

图片 20

# scp
/etc/pki/CA/certs/web-vhosts-com.crt
root@192.168.1.145:/etc/httpd/ssl

 

(3)192.168.1.145查看证书信息:

 

图片 21

“(OS 10048)通常每个套接字地址
(协议/网络地址/端口) 只允许使用一次: 
make_sock: could not bind to
address 0.0.0.0:433…” 

# openssl x509 -in
/etc/httpd/ssl/web-vhosts-com.crt -noout -text       //显示的信息多

一般其他程序(例如:SVN服务器)占用了443端口引起的。关闭服务或者改下端口号。就可以了。

# openssl x509 -in
/etc/httpd/ssl/web-vhosts-com.crt -noout -subject

 

# openssl x509 -in
/etc/httpd/ssl/web-vhosts-com.crt -noout -serial

测试,运行效果如下

图片 22

图片 23

备注:

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139727.htm

  • 使用私钥web-vhosts-com.key和证书web-vhosts-com.crt生成微软专用证书web-vhosts-com.crt.pfx:

图片 24

# cd
/etc/httpd/ssl

# openssl pkcs12
-export -out web-vhosts-com.pfx -inkey web-vhosts-com.key -clcerts -in
web-vhosts-com.crt

图片 25

  • 使用微软专用证书web-vhosts-com.pfx生成私钥web-vhosts-com.key和证书web-vhosts-com.crt:

# openssl pkcs12
-in web-vhosts-com.pfx -nodes -out web-vhosts-com.pem

图片 26

# openssl rsa -in
web-vhosts-com.pem -out web-vhosts-com.key

图片 27

# openssl x509 -in
web-vhosts-com.pem -out web-vhosts-com.crt

 

9、192.168.1.145配置Apache支持SSL:

(1)安装SSL模块:# yum -y install
mod_ssl

备注:yum方式安装的Apache默认没有装载SSL模块,即没有/etc/httpd/conf.d/ssl.conf配置文件,也没有/usr/lib64/httpd/modules/mod_ssl.so模块文件

图片 28

(2)配置HTTPS虚拟主机并访问测试页:

# vim
/etc/httpd/conf/httpd.conf,末尾新增如下代码:

图片 29

备注:上述内容也可在配置文件/etc/httpd/conf.d/ssl.conf中直接修改

# httpd -t

# service httpd
reload

# ss -tnl | grep
:443

图片 30

 

图片 31

 

图片 32

图片 33

图片 34

(3)将所有HTTP请求(80端口)重定向到HTTPS(443端口),并访问测试页:

# vim
/etc/httpd/conf/httpd.conf,在<VirtualHost*:80>和</VirtualHost>标签中新增如下代码:

图片 35

# httpd -t

# service httpd
reload

直接访问web.vhosts.com,会自动跳转至

图片 36

直接访问web.vhosts.com/test.html,会自动跳转至

图片 37

/etc/httpd/conf/httpd.conf最终末尾一共新增了如下代码:

图片 38

 

10、在360安全浏览器中安装证书:

(1)360安全浏览器中访问效果:

图片 39

(2)将192.168.1.146中的证书/etc/pki/CA/cacert.pem保存至本地Windows10桌面,并重命名为cacert.crt

(3)在360安全浏览器中安装证书:设置 –> 安全设置 –> 管理HTTPS/SSL证书

图片 40

 

图片 41

 

图片 42

 

图片 43

 

图片 44

 

图片 45

 

图片 46

 

图片 47

(4)重新打开360安全浏览器,再次访问测试页:

图片 48

图片 49

已没有“证书风险”的提示

(5)查看证书信息:

图片 50

 

图片 51

备注:如果是生产环境中需要使用证书,建议从正规的证书颁发机构处申请。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147664.htm

图片 52

相关文章