Linux运维技术之WEB服务详解,超级详细!!!

 

HTTP:超文本传输协议,默认为TCP的80端口。带有超级链接的文本,而这些链接成为超链接!

loadrunner :专业级测试工具,模拟你的应用程序的真实,进行评测!

HTML:超文本编辑语言。

HTML文档:实现将这些分散在多台web服务器上的资源整合成一个页面,并能够让浏览器显示的。

 

URI:统一资源标识符,用以定义可以在全局范围内唯一引用某一个独立的资源的命名方式!包括但不唯一引用互联网。

    去标记唯一的定位一种资源访问路径的方式,路径格式上的统一。

URL:统一资源定位符统一资源标识符的子对象,统一资源定位符!用于描述在互联网上互联网资源的统一表示格式。

      URL路径与本地路径不是一码事。

      URL是相对于httpd配置文件中的DocumentRoot路径而言的,相对路径。

怎么去表示?

指明去获取资源的协议://指定服务器在什么主机上:指定在主机那个端口去获取/对应服务器上的路径/文件

       http://www.baidu.com/sun/sun/txt

web资源/web对象:通过统一资源定位符唯一的标记标记他,并且能够让客户端去访问它的文件!

                   多个资源很可能被整合为一个HTML文档!

 

Apache是世界使用排名第一的Web服务器软件

httpd是Apache超文本传输协议(HTTP)服务器的主程序。

资源获取的方式/http方式:

   MIME:多用途邮件扩展,将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能用对用的程序打开此文件。

   SMTP:简单邮件传输协议,只能传输纯文本,

index.heml:引用n个web对象,URL。

监听:监听在某一个端口上,等待客户端来请求。一旦用户来了,内核才知道用户来访问。

 

三种模型支持的并发连接数

prefork MPM :一个进程响应一个请求,最多1021个

worker MPM :一个线程响应一个进程,多进程,一个进程生成多个线程,

event MPM :基于事件驱动,比上面那两个要好

 

 

HTTP报文 ---->请求报文 ,响应报文。

  http首部:

    GET /....      :要获取那个文件

    HOST:主机名  :要获取那个主机上的资源

 

请求报文的格式(客户端请求)

起始行  <method> :资源获取方法    <request-URL>:你请求的资源是什么(路径)  <version>:对应请求协议的版本号(1.0/0.9)

报文首部  <headres>:http协议首部

空白行

<entity-body>:报文主体(报文内容)

 

响应报文的格式(服务器响应)

起始行  <version>:对应的版本   <status>:状态代码   <reason-phrase>:详细解释状态代码返回的信息

报文首部<headers>:响应报文首部

空白行               空白行

报文主题  <entity-body>:报文主体(报文内容)

 

状态代码 (你请求的结果是正确的还是失败的?)5类!

   1xx:纯信息

   2xx:成功类状态信息,请求内容成功。

         200:请求内容正常

   3xx:重定向类信息,你请求的内容存在,但被挪到其他地方去了。

         301:永久挪到其他地方

         302:临时重定向

         304:没有发生任何改变

   4xx:客户端错误类信息

         404:请求了一个不存在的文件

   5xx:服务器端错误类信息

 

web服务器的主要操作

1、建立连接----->接受或拒绝客户端连接请求

2、接受请求----->通过网络读取HTTP请求报文

3、处理请求-----> 解析请求报文并做出相应的动作

4、访问资源-----> 访问请求报文中相应的资源

5、构建响应-----> 使用正确的首部生成http响应报文

6、发送响应----->向客户端发送生成的响应报文

7、记录日志----->把已经完成的http事务记录进日志文件

 

缓存:每一个资源都要单独请求一次,(每张照片、每个超链接),所以,我们的服务器都是多线程的。将访问的东西都缓存到本地,第二次打开时会非常快。

http0.9版本:引入了MIME功能+

http1.1版本:加强缓存管理功能,引入长连接

              长连接:客户端和服务器之间获取一个资源之后不断开,持续获取之后的资源,获取资源时间减少。

                         限定:1、空闲超时,若你请求完第一个、第二个资源之后再也不请求了,就让你断开,让后面人获取资源。

                               2、最多让你请求多少次

服务器处理模型(多道处理模块)

单线程服务器模型:有多个客户端请求,服务器处理完一个请求报文之后再处理第二个,依次执行。

多线程服务器模型:有多个客户端请求,服务器进程不直接响应给客户端,他只接受客户端请求。第一个请求来了,服务器自己不响应,

                   他生成一个子进程,让子进程去处理,第二个客户端请求,再次生成一个子进程,让新的子进程处理。服务器本身只接

                   收请求,让子进程去处理。

多进程,多线程:有一个主进程,和好多子进程,每个进程都能同时处理多个请求.

 

HTTP服务---> http://httpd.apache.org/(官方网站)

httpd  service :纯粹的web服务器,同时开源(不是GPL)。

     特性:1、在进程特性上通常是事先创建进程,

           2、按需维持适当的进程(多进程多线程),维持保留一定数目的进程。

           3、模块化设计,核心只具备最基本的功能,所以内核比较小。各种功能都能通过模块添加。

           4、支持运行时配置,支持单独编译模块

           5、支持多种方式的虚拟主机配置

           6、支持https协议,(使用一个模块来实现的mod_ssl)

           7、支持用户认证

           8、基于IP或主机名的访问控制机制(ACL)

           9、支持URL重写、条件式重写

套接字:一个IP地址和一个端口号组成

虚拟主机:一台物理服务器,web程序只有一个,却可以服务不同的站点。

    1、基于IP的虚拟主机,不同的IP提供不同的主机

    2、基于端口的虚拟主机,不同的端口提供不同的站点

    3、基于域名的虚拟主机,IP一样,端口一样,但是由于其站点访问的时候DNS解析的那个主机名不同,却也可以打开不同的虚拟主机

IP+端口 可以组成一个套接字,而一个套接字只能为一个服务去提供服务的!

redhat安装方法:

 1、使用系统自带的rpm包

 2、源码编译(自定义功能)

https是由seLinux控制的,事先禁用它---->查看selinux状态getenforce(让他处于permssive/disabled)

                 使用命令setenforce  0  将其禁用,当前生效

                 编辑/etc/selinux /config 改大写的SELINUX那一行,改为permssive.

安装包httpd:

    1、执行进程服务在/usr/sbin/httpd事先创建新进程并接受用户请求

     一但启动起来进程,系统中会有好多httpd进程,在众多进程中

     有一个httpd进程的属主属组都是root,负责创建空闲进程,或者销毁多余的空闲进程--->master  process

     其余httpd进程的属主属组都是Apache,工作进程----worker  process

    2、Apache的服务脚本在/etc/rc.d/init.d/httpd。

    3、服务启动起来占据的TCP的80端口,(基于ssl的占据443/tcp端口)

    4、基于rpm包编译安装的httpd工作的根目录在/etc/httpd

            /etc/httpd/conf :主配置文件目录

               httpd.conf :主配置文件

            /etc/httpd/conf.d/*.conf 的配置文件也是主配置文件的组成部分。

            /etc/httpd/moudules 这个目录下有各种模块的链接文件

            /etc/httpd/logs链接 ---->/var/log/httpd :日志文件

                 日志文件有两类,访问日志(access_log)错误日志(error_log)

            /var/www/  主要有两个目录,存放Web主页面

                      html :提供静态页面所在路径

                      cgi_bin:提供动态内容所使用的路径

问题httpd或web并不处理任何动态内容,那么它是如何处理动态内容???

通过某种协议调用额外的其他程序来运行这个程序,并将结果取回来以后,响应给客户端。

     cgi(通用网关接口):让web服务器能够跟额外的应用程序通信的一种机制

          能够让你的web服务器必要的时候调用一个额外的应用程序来处理动态内容。

LAMP=Apache+PHP+MySQL

动态网站:

              客户端动态:我们把程序(这个程序是源码,源文件)放在网站上,先被用户下载到本地,在用户本地执行。

              服务器动态:当用户访问一个动态数据,而服务器中放的是数据的脚本文件,服务器不能直接给用户脚本文件,而是通过CGI调用服务

                          器中的合适的解释器,把这个脚本运行起来,把运行的结果返回给用户。

 

/etc/httpd/conf.d/ welcome.conf :这是http服务的一个欢迎界面,若没有任何网络文件,就显示这个欢迎界面.改名之后就可以了.

配置文件由参数和指令组成!

指令不区分字符大小写,参数则需要!

httpd主配置文件(注意!主服务器和虚拟主机不能同时运行。默认使用主服务器配置!)

使用 grep  "Section"  http.conf  --->查看配置文件中分为几段

第一段:### Section 1: Global Environment  --->全局环境配置

第二段:### Section 2: 'Main' server configuration   --->主服务器配置

第三段:### Section 3: Virtual Hosts   --->虚拟主机

第1个选项:ServerTokens  [OS] :输出操作版本信息

             Servertokens major :只显示主版本号

             Minor :+显示次本号

             Min :+显示次尾号

             Prod :显示软件本身

             OS :连操作系统版本也会显示

             Full :全部信息显示

注意!用yum仓库装这个包也会给你显示参数指令指南  yum -y install httpd-manual。在/etc/httpd/conf.d/manual,con配置文件,只需在访问路径下加上manual这个,重启一下服务就OK。

第一段全局设置

第2个选项:ServerRoot "/etc/httpd" :服务器的工作目录在这里(根目录),不到万不得已不要改这里,因为有很多文件是跟这个路径相对产生的

第3个选项:PidFile  run/httpd.pid :文件的PID号。run是相对路径,生成的文件是相对于这个路径而言的!

第4个选项:Timeout  60 :针对于tcp的三次握手,超时时间!

第5个选项:KeepAlive Off :是否使用长连接

第6个选项:MaxKeepAliveRequests  100 :长连接限制,每个用户只能持续请求一百次。设定为0是无限制。

第7个选项:KeepAliveTimeout  15 :用户使用长连接请求间隔时间。用户请求间隔时间不能超过15秒,不能占着茅坑不拉屎!

MPM:多处理模块,用于定义Apache在响应多个用户请求时我所工作的模型的!

           prefork MPM:预先生成进程(一个请求用一个进程响应)稳定性好!(最多)

           worker MPM:基于线程来工作的(一个请求用一个线程响应.启动多个进程,每个进程生成多个线程)

           event MPM :基于事件的驱动(一个进程处理多个请求)

 改变使用模型:/etc/sysconfig/httpd中有一个HTTPD=。。。启动这一项是启用。。。。模型

第8个选项:  <IfModule prefork.c> :若启用了prefork模块

              StartServers       8 :服务器刚一启动就生成多少个进程

              MinSpareServers    5 :最少空闲的进程

              MaxSpareServers   20 :最大空闲的进程

              ServerLimit      256 :为MaxClients指定硬限制,要想更改必须先关闭服务在更改两个上限数

              MaxClients       256 :最大客户端数,最多多少个客户端同时进行请求

              MaxRequestsPerChild  4000 :一个子进程最多响应多少个用户请求,一旦达到这么多次了,无论如何就得杀死这个子进程

              </IfModule> :

 

第9个选项:<IfModule worker.c>

              StartServers         4 :默认启动多少个进程

              MaxClients         300 :最大客户端数

              MinSpareThreads     25 :最小空闲线程

              MaxSpareThreads     75 : 最大空闲线程

              ThreadsPerChild     25 :一个进程最多生成多少个线程

              MaxRequestsPerChild  0 :一个子进程最多响应多少个用户请求,0为不做限定。

              </IfModule>

 

第10个选项:#Listen 12.34.56.78:80 :指定监听那个主机上的IP地址。

               Listen 80 :指定监听的端口。可同时监听多个端口,再写一行Listen 8080。

第11个选项:# Example:

              # LoadModule foo_module modules/mod_foo.so :httpd模块化设计,装载模块的

              #   关键字        模块名称       相对路径

               LoadModule auth_basic_module modules/mod_auth_basic.so

               LoadModule auth_digest_module modules/mod_auth_digest.so

               LoadModule authn_file_module modules/mod_authn_file.so

               LoadModule authn_alias_module modules/mod_authn_alias.so

               。。。。。。

第12个选项:Include conf.d/*.conf  主配置文件的组成部分

第13个选项:User apache :指定属主

             Group apache :指定属组

第二段主服务器设置

第1个选项:ServerAdmin  root@localhost :服务器管理员

第2个选项:#ServerName  www.example.com:80 :主机名,未开启。

第3个选项:UseCanonicalName  Off :正式名称

第4个选项:DocumentRoot  "/var/www/html" :文档根目录。

第5个选项:# features. 

             <Directory />

             Options FollowSymLinks

             AllowOverride None

             </Directory>

第6-11选项:定义文档根目录限制,用一个容器<Directory> </Directory >

        <Directory "/var/www/html"> :用一个容器<Directory> </Directory >来限制文档根目录访问限制

        Options  [Indexes] [FollowSymLinks] :options 用于定义DocumentRoot  "/var/www/html"这个目录下的所有网络文件。

                                     (Indexes:允许索引目录,必须去掉!把你文档根目录下的所有目录列举出来让你自己选。

                                      None:不支持任何选项

                                      FollowSymLinks  :允许访问符号链接指向的源文件。必须去掉

                                      ExecCGI :允许运行CGI脚本

                                     MultiViews :内容协商的一种机制,根据你的客户端来源的语言和文字来判定我应该显示哪一种网页给你        AllowOverride  None (不生效):是否生效/覆盖底下这两项(服务器的访问控制列表)

                      Authconfig :需要基于一个文件的用户的用户名和密码来基于认证之后才可以访问,这个文件需要自己建立。

                      Limit :

                      FileInfo :

        Order allow,deny :[allow允许/deny拒绝]用于定义基于主机的访问控制功能的。实现IP、主机名、网络地址定义访问控制机制。

        Allow from all :允许所有人访问[IP(可以只写一部分)  主机名   域名 ]

        </Directory>

使用httpd  -t :来测试配置文件语法真确性的!

实验:把AllowOverride 设为Authconfig 并自己创建一些选项。

基于用户来限制访问

AllowOverride  Authconfig  设置为基于一个文件的用户账户为访问限制

AuthType  Basic  :设为基本认证(basic)

AuthName   "sun" :在用户认证时给他显示一个名字

AuthUserfile  /etc/httpd/conf/htpasswd :认证用户时,认证用户的文件是哪个(验证文件,自己创建)

Require  user  sun  :只允许sun这个用户才可以访问

Require  valid-user :这个文件中的所有用户都能登陆

使用命令来建立这个文件htpasswd,  格式htpasswd   这个文件的路径     要添加的用户

                  -c:第一次创建这个文件时要使用。若曾经有这个文件还是用-c这个选项会把以前的数据覆盖掉!

                       注意!添加第二个用户时不需要加-c这个选项了

                  -m:用户的密码是以md5的方式加密存放的

                  -D:删除用户,从添加进的用户删除用户!格式:htpasswd  -D  认证文件的路径  用户名

   使用httpd -t 检测一下,重启服务就可以了!

基于组来限制访问

AllowOverride  Authconfig  设置为基于一个文件的用户账户为访问限制

AuthType  Basic  :设为基本认证(basic)

AuthName  "sun"  :在用户认证时给他显示一个名字

AuthUserfile  /etc/httpd/conf/htpasswd :创建认证用户的验证文件(验证文件,自己创建)

AuthGroupFile  /etc/httpd/conf/htgroup : 创建认证用户组的验证文件

Require  group  sun  :只允许sun这个组中的用户才可以访问

自己在这路径下创建一个文件,文件格式:组名:用户1   用户2   用户3

注意!你添加进组的用户必须已经在用户密码认证文件中。

第11-14选项:

<IfModule  mod_userdir.c> :针对于mod_userdir.c这个模块(httpd -l/httpd -M查看支持的模块)

                          是否支持用户在自己的家目录中建立各种的网络文件。用http://192.168.2.112/~sun/网络文件这种格式来访问。

UserDir disabled :默认是不予许的,若想开启这种模式只需要注释掉这一行。

# UserDir  public_html :开启这一行就可以了,明确指定在账户的家目录下哪一个目录下放网页文件,默认是public_html这个目录。

</IfModule>:这个功能在下面有被注释掉的一些选项!

实验:建立一个自己家目录的网页文件

1、在自己加目录创建一个文件夹,默认文件夹是public_html,在里面添加网页文件(index.html)。

2、返回root用户,添加权限chmod  o+x /家目录中创建的文件夹

3、访问http://192.168.2.112/~sun/ ,别忘了开启选项和重启服务!

第15选项:

DirectoryIndex  index.html index.html.var :用于定义若我们访问主页时不指定访问那个页面,默认转到index.html或index.html.var这个文件的页面。

第16选项:

AccessFileName  .htaccess :定义每个目录访问限制,使Apache服务器效率极低!这些限制是自上而下继承的

第17-20选项:

<Files ~ "^\.ht"> :~用于对后面的文件做模式匹配,定义私密文件不被别人窃取到。

 Order allow,deny :先允许后拒绝

 Deny from all :拒绝所有人

 Satisfy All

</Files>

第21选项:TypesConfig  /etc/mime.types :多用途互联网邮件扩展。用于定义我们的http协议可以传输多媒体文档。定义了支持哪些媒体文件

第22选项:DefaultType  text/plain :默认类型为文本下的纯文本信息。(事先没有给支持的类型文件)

第23-26选项:

<IfModule mod_mime_magic.c> :判断,如果你的模块mod_mime_magic.c存在的话。

#   MIMEMagicFile /usr/share/magic.mime :

    MIMEMagicFile conf/magic

</IfModule>

第27选项:HostnameLookups  Off :在访问日志里面是否记录主机名(若开启,每个用户的IP地址都会解析为主机名,浪费资源)

第28选项:ErrorLog logs  /error_log :错误日志

第29选项:LogLevel  warn  :日志级别

第30-34选项:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined :访问日志格式,(combined 混合模式)

LogFormat "%h %l %u %t \"%r\" %>s %b" common  :(common通用模式)

LogFormat "%{Referer}i -> %U" referer :(referer 只记录客户端访问来源)

LogFormat "%{User-agent}i" agent :(agent 只记录客户端浏览器类型)

第35选项:CustomLog  logs/access_log  combined :用来定义访问日志的日志文件及其访问类型

第36选项:ServerSignature  On

第37-43选项:

Alias  /icons/  "/var/www/icons/" :路径别名,一个路径映射到另外一个位置的别名!

      别名       映射的路径      可以自己创建!!!

<Directory "/var/www/icons">

    Options Indexes MultiViews FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

 

第三段虚拟主机

要想使用虚拟主机,必须先取消中心主机!(只需要注释中心主机的Document Root就行)

虚拟主机:能够在一台物理主机上虚拟出多个同时运行的站点!

我们运行一个Apache服务,当这个Apache进程运行起来以后,可以服务于多个站点。

 

虚拟主机:服务于多个不同的站点

           基于IP:每一个主机使用不同的IP地址,端口相同。

           基于端口:IP地址相同,端口不同。(网页间跳转或公司内部使用)外部不能使用

           基于域名:IP地址和端口号相同,但主机名不同

Apache2.2中,需要一条命令来启用基于主机名的虚拟主机(命令:NameVirtualHost)

Apache2.4中,三种不同功能名称的虚拟主机不再需要命令,各自定义就可以

问题:为多个站点定义时需要具备哪些东西?

1、位于不同的目录(Document  Root)

2、主机名不同(Server  Name),基于主机名

3、用一个容器来定义某个站点需要认证,有某个站点不需要认证。

        <directory"目录路径">   --->为站点定义一个容器,在这个容器中设定访问限制

            option      --->定义这个目录下的所有网络文件

            allowoverride   --->以用户名的方式限制

       </directory>   --->结束

4、虚拟主机还可以使用路径别名、服务器别名

 

<directory"目录路径">   </directory>  用于封装定义用户访问本地文件系统下的文件时应该具有什么样的属性。

  <location"文件路径">   用于定义URL,使用相对路径,相对于Document  Root而言的!

  script alias :定义允许执行CGI脚本的目录

  </location>  

 

 

虚拟主机的定义 :

使用一个容器来定义某一个特定的虚拟主机

<virtual  HOST>

< /virtual  host>

这个HOST(主机名)该怎么写?

  基于IP: 不同IP:同一端口

基于端口:同一IP:不同端口

基于主机名:IP:端口 ,server name 不同主机名

 

 

 

  基于IP的虚拟主机

1、首先将主配置文件中的中心主机配置选项中的文件根目录失效!

    #DocumentRoot "/var/www/html"在配置文件前面添加#号

    ServerName  www.example.com:80  顺便把主机名那一选项打开

2、你可在主配置文件中添加虚拟配置,也可以新建一个文件(这里我选的是重新再conf.d这个目录下新建一个文件)。

      新建文件名为virtual.conf,在里面添加这么几行

<VirtualHost 192.168.178.133:80>  --->添加一个虚拟主机的容器,里面有  IP:端口号

ServerName www.sun2.com    --->这个网页的主机名称(域名)

DocumentRoot "/www/sun2"   --->文件根目录在。。。

</VirtualHost>  --->结束

 

<VirtualHost 192.168.178.132:80>

ServerName www.sun1.com

DocumentRoot "/www/sun1"

</VirtualHost>

3、创建这个虚拟主机的文件根目录

     mkdir  -pv  /www/{sun1,sun2}

4、在每个文件根目录中添加网页文件!然后重启服务

!注意:若网页提示权限不够(禁止),那就关闭防火墙

基于端口的虚拟主机

与基于IP的虚拟主机配置一样,只是要IP相同,端口改一下!

别忘了在主配置文件中添加监听端口: Listen 81

基于主机名(域名)的虚拟主机

首先开启主配置文件中的#NameVirtualHost *:80这一栏,开启虚拟主机的基于域名配置文件。

或者自己在配置文件中写上NameVirtualHost  IP地址:端口

<virtualhost 192.168.178.132:81>

servername  www.sun1.com

DocumentRoot   "/www/sun1"

</virtualhost>

 

<virtualhost 192.168.178.132:80>

servername  www.sun2.com

DocumentRoot   "/www/sun2"

</virtualhost>

 

IP地址和端口号相同,域名不一样。要配置成功必须配置dns服务!

dns服务要使用静态的。

 

用户限制

<Directory "/ wwwl"> :用一个容器<Directory> </Directory >来限制文档根目录访问限制

AllowOverride  Authconfig  设置为基于一个文件的用户账户为访问限制

AuthType  Basic  :设为基本认证(basic)

AuthName   "sun" :在用户认证时给他显示一个名字

AuthUserfile  /etc/httpd/conf/htpasswd :认证用户时,认证用户的文件是哪个(验证文件,自己创建)

Require  user  sun  :只允许sun这个用户才可以访问

Require  valid-user :这个文件中的所有用户都能登陆

</Directory>

 

设置各自的日志文件

1、配置自己的配置文件,设置访问日志路径

<VirtualHost 192.168.178.133:80>

ServerName www.sun2.com   

DocumentRoot "/www/sun2"  

CustomLog   /var/log/httpd/目录名/access_log   combined  --->设置你自己的访问日志文件位置,格式为combined

</VirtualHost> 

2、创建日志文件

      mkdir -pv  /var/log/httpd/目录名  只创建目录

      chown  apache:apache  目录名  目录名。。。  改为Apache属主属组!

      然后重启服务,系统自动给你创建日志文件!

 

基于openssl的httpd服务配置

 

OpenSSL:是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

CA:证书管理机构

!注意:两台主机之间通信靠的是IP地址和端口号,因此SSL的会话仅能基于IP来进行,所以只能服务于一台服务器。若是有多台基于域名的虚拟主机,只能有一个虚拟主机能使用ssl会话。

 

操作步骤

1、安装基于ssl的Apache模块(在web服务器中安装)

       yum  -y  install   mod_ssl

       或者  rpm -ivh  /media/Packages/mod_ssl-2.2.15-26.el6.x86_64.rpm

[root@pc1 /]# rpm -ql mod_ssl   --->查询一下模块安装完成之后生成了那些文件

/etc/httpd/conf.d/ssl.conf       --->ssl的主配置文件

/usr/lib64/httpd/modules/mod_ssl.so   --->安装了一个模块,模块的位置

/var/cache/mod_ssl     --->缓存目录,ssl的缓存数据

/var/cache/mod_ssl/scache.dir    --->

/var/cache/mod_ssl/scache.pag    --->

/var/cache/mod_ssl/scache.sem     --->

2、提供CA, CA字签证书,然后让服务器生成一段密钥,把公钥发送给服务器端,让服务器端实现签名!

        打开一台新的主机,当做CA(证书管理机构)

        进入  /etc/pki/CA

        生成一个私钥   openssl     genrsa     -out     private/cakey.pem    2048

                   生成私钥命令  ssl格式    保存在   路径             秘钥长度

        改变权限  chmod  600  private/cakey.pem        -rw-------

        生成字签证书,生成字签证书需要添加许多信息,包括国家、姓名。。。。,这里有一个默认信息/etc/pki/tls/openssl.cnf

        编辑/etc/pki/tls/openssl.cnf

           countryName_default             = CN   --->国家 (CN中国)

            stateOrProvinceName_default     = ShanDong   --->省份名称

                    localityName_default    = BinZhou  --->城市名称

             0.organizationName_default      = sun   --->组织名称

              organizationalUnitName_default  =tech   --->部门名称

         先给自己生成一份字签证书  openssl  req  -new  -x509  -key  /etc/pki/CA/private/cakey.pem  -out  cacert.pem  -days  3655

                                  Common Name (eg, your name or your server's hostname) []:   --->主机名,这个证书发给谁就是谁的主机名

                                  Email Address []:  --->邮箱名

                              

 

         生成字签证书结束!

        要把它装扮成一个私有的CA或者字签CA,还需要对这个文件进行一些改动  /etc/pki/tls/openssl.cnf。

              [ CA_default ]

              dir             = /etc/pki/CA          --->生成的证书存放目录

              certs           = $dir/certs           --->生成的证书存放位置

              pt

              crl_dir         = $dir/crl             --->吊销的证书存放位置

              database        = $dir/index.txt     --->文件,我们签了多少证书,每个证书叫什么

              #unique_subject = no             

              of

  

              subject.

              new_certs_dir   = $dir/newcerts      --->新签的证书存放位置

              certificate     = $dir/cacert.pem     --->生成证书的文件名(相对路径,相对于dir而言)

              serial          = $dir/serial          --->文件,序列号,我们已经签到第几个了

              crlnumber       = $dir/crlnumber

             e a V1 CRL

              crl             = $dir/crl.pem         

              private_key     = $dir/private/cakey.pem   --->生成的密钥存放位置以及文件名

              RANDFILE        = $dir/private/.rand  

       新建生成、吊销、新签证书的文件夹。在/etc/pki/CA目录下创建。

                   mkdir   certs  crl  newcerts

                   touch   index.txt   --->在/etc/pki/CA下创建

                   echo  01  >  serial      --->创建serial文件,表明签的是第一个证书文件

3、现在已经准备好了,CA可以用了,接下来有人需要用到证书,它只需要自己生成一段密钥,并且把他的申请放到我们这里来,并生成一个证书签署请求,并且把我们的请求发到我们的服务器上来给他做一下签署就可以了

4、现在回到我们的服务器端,在/etc/httpd/创建一个文件夹ssl。mkdir  ssl

   若是说这个证书就是给我们的web服务用的,我们把证书放在 /etc/httpd/ssl/目录下,手动创建ssl

                      mkdir   ssl   --->手动创建这个文件夹

      进入这个文件夹,生成一段密钥    openssl     genrsa     1024   > httpd.key

                                      密钥命令    密钥格式  长度   导入到这个文件中

      并给这个文件改权限  chmod 600 httpd.key

      生成证书颁发请求 (证书签署请求) openssl  req  -new  -key  httpd.key  -out  httpd.csr   (信息必须与CA那边一样)

     把生成的文件发送给CA  建议使用scp  文件名   对方IP地址:路径

5、回到CA服务器,进行签署,

         进行签署  openssl ca -in /tmp/httpd.csr -out  /tmp/httpd.crt  -days 3650  (会有一个提问,是否信息一致,回答yes)

         查看信息 cat  /etc/pki/CA/index.txt   出现信息

         再查看一下 cat  /etc/pki/CA/serial   信息变成02

     现在证书已经发好了,发送给请求者即可,

6、回到httpd服务器,下载证书,scp  证书服务器IP:证书地址   本地路径(ssl文件夹中)

   然后编辑ssl的主配置文件 /etc/httpd/conf.d/ssl.conf

  <VirtualHost   IP:443>   --->监听的主机

DocumentRoot  "/www/sun"   --->与虚拟主机配置一致

ServerName  www.example.com:443   --->与虚拟主机配置一致

ErrorLog   logs /ssl_error_log   --->错误日志

TransferLog  logs/ssl_access_log   --->访问日志

LogLevel warn    --->日志级别

SSLEngine  on   --->是否启用ssl功能若不启用改为off

SSLProtocol  all -SSLv2   --->支持哪些ssl的协议

SSLCertificateFile  /etc/httpd/ssl/httpd.crt  --->证书文件路径

SSLCertificateKeyFile  /etc/ httpd/ssl/httpd.key  --->私钥文件路径

保存,使用httpd  -t 检测语法,重启httpd服务,使用netstat  -nupt  |grep 443 ,检测443端口

7、虽然可以使用,但是证书不够信任,我们把CA的证书发送给服务器一份。

    把/etc/pki/CA/cacert.pem这个证书发送给我们的httpd服务器

 

 

 

如果此文章有帮助到您,还请麻烦动动您的小手点个赞,谢谢~   

【免费】最新版Linux运维技术入门视频教程请移步:https://edu.csdn.net/course/detail/29944

Linux运维技术交流群:962822359

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

え 小洲گق

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值