草庐IT

Apache服务器配置SSL证书步骤及问题记录

还没下班吗 2023-10-29 原文

目录

1、证书申请2、证书下载2-1 开启443端口(HTTPS服务的默认端口)2-2 检查服务器上是否安装mod_ssl.so模块3、部署证书3-1 上传文件3-2 修改httpd.conf配置文件3-3 修改httpd-ssl.conf配置文件3-4 修改httpd.conf文件3-5 验证部署结果

网站上线之后,考虑到日常使用服务并不涉及HTTPS需求,加上自己对于部署SSL证书的流程一点都不了解,就搁置了。

前两天在学习新的案例时,要求涉及域名的访问必须是HTTPS,无奈又回头来补习这一块。

1、证书申请

阿里云服务器有免费的证书可以申请(1年有效期),具体位置:

左上角产品与服务中找到SSL证书(应用安全),找不到的可以在搜索栏进行搜索查找。


跳转新页面之后,点击左侧SSL证书,选择免费证书,然后点击立即购买,在购买页面选择DV单域名证书【免费试用】,购买数量默认20(超过20个需要收费)。因为证书买的比较早,其他需要注意的信息可以自行在网上搜索。

 

2、证书下载

购买成功之后,可以在当前的“免费证书”类目下看到“创建证书0/20”,表示当前有20个可用证书额度,点击创建证书即可在下方生成一条待申请的信息。


点击证书申请,在页面中填入“证书绑定域名”、“域名验证方式”(写入域名之后,如果域名在阿里云域名服务控制台的域名列表中,则此处自动匹配自动DNS验证方式,无需手动配置。由阿里云自动完成域名验证)、“联系人”、“所在地”、“秘钥算法”(默认,不用改)、“CSR生成方式”(默认系统生成,不用改),点击下一步,确认提交信息无误之后,点击“验证”即可完成证书申请,几分钟之后证书状态会变为“已签发”。


在已签发证书操作栏中,点击下载,根据自己的服务器类型下载对应的证书(因为我的服务器类型是Apache,后续均以此为例进行说明,其他类型的SSL证书部署流程可以参考阿里云官方文档:数字证书管理服务)。


到这里,已经做好了在Apache服务器上安装SSL证书前期准备的第一部分。根据操作文档提示,还有另外两步需要进行确认:

① Apache服务器上已经开启了443端口(HTTPS服务的默认端口)

② Apache服务器上已安装了mod_ssl.so模块(启用SSL功能)

2-1 开启443端口(HTTPS服务的默认端口)

在左上角功能栏找到“云服务器ECS”


在云服务器ECS中找到需要对齐进行操作的那一台服务器,点击该服务器实例进入实例详情页


在实例详情页点击“配置安全组规则”,跳转页面中点击“配置规则”


配置规则页面,在“入方向”栏目下,点击“手动添加”,在新的规则中,仅需要对“端口范围”(选择HTTPS(443)),“授权对象”(选择:0.0.0.0/0)两项进行选择提交即可。


如果有宝塔面板,此时还需要在宝塔面板中对443端口进行放行。至此,即完成了服务器上443端口的开启。

 

2-2 检查服务器上是否安装mod_ssl.so模块

检查方法:查看是否在 modules (/apache/modules/)下存在mod_ssl.so


如果不存在,需要进行安装,安装方法,在终端窗口执行命令:

yum -y install mod_ssl

安装成功之后会显示:

 

3、部署证书

前两部分已经完成了证书部署的所有准备工作,接下来开始部署SSL证书。

3-1 上传文件

在Apache安装目录中新建cert目录,并将之前下载的证书文件解压,把解压得到的Apache证书、证书链文件和密钥文件上传到cert目录中。(如果有多个域名需要进行SSL证书部署,则需要对应的在Apache安装目录下创建多个cert目录,可以命名为cert1、cert2·····)

 

3-2 修改httpd.conf配置文件

在Apache安装目录Apache/conf/下(Apache/conf/为Apache的默认安装目录,如果修改过该路径,需要在修改后的路径下查找httpd.conf文件。)找到并双击打开httpd.conf文件,在代码中找到以下参数,然后去掉参数前面的“#”。修改之后,点击保存,关掉编辑器。

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

 

3-3 修改httpd-ssl.conf配置文件

在Apache/conf/extra/目录下,找到并双击打开httpd-ssl.conf文件,按照以下格式进行配置。


对于像我这样的新手,在这里被各种问题困扰了很久,反复修改试错和很多次才绕出来,这里详细说明一下:

①示例中代码在编辑器中并不是同样排布的,需要自行搜索定位,外层(第一行和最后一行)

<VirtualHost *:443>
</VirtualHost>

在编辑器中是

<VirtualHost _default_:443>
</VirtualHost>

为了防止出现未知的问题,按照格式中要求更改即可。

 

② ServerName 修改为申请证书时绑定的域名

举例,假如申请证书时绑定的域名是www.abcdefg.com,那么这一行代码需要改为:

ServerName   www.abcdefg.com

③ (重点)

DocumentRoot  /data/www/hbappserver/public

DocumentRoot是你需要配置的项目的根目录,比如我的项目是一个网站,用户访问https://www.abcdefg.com的时候是需要能正常打开该网站的,那么就需要将这个网站的路径填在这里,那么我这里填的就是

DocumentRoot "/www/wwwroot/www.abcdefg.com”

这一点很重要,当时被这个问题困扰了特别久。

SSLEngine on

找到对应代码,照抄

SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议

找到对应代码,照抄

SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM

找到对应代码,照抄

⑦ SSLHonorCipherOrder on

找到对应代码,照抄

⑧ (注意)

SSLCertificateFile cert/domain_name1_public.crt

找到SSLCertificateFile对应的代码行,如果前面有#,需将#去掉,然后将上面示例中domain_name1_public.crt替换成您证书文件名,这里文件名中有public,那么替换的文件名也一定是解压出来的那个带有public的文件名(注意文件后缀.crt不能省略)。

⑨ (注意)

SSLCertificateKeyFile cert/domain_name1.key

找到SSLCertificateKeyFile对应的代码行,如果前面有#,需将#去掉,然后将上面示例中domain_name1.key替换成您证书文件名(注意文件后缀.key不能省略)。

⑩ (注意)

SSLCertificateChainFile cert/domain_name1_chain.crt

找到SSLCertificateChainFile对应的代码行,如果前面有#,需将#去掉,然后将上面示例中domain_name1_chain.crt替换成您证书文件名,这里文件名中有chain,那么替换的文件名也一定是解压出来的那个带有chain的文件名(注意文件后缀.crt不能省略)。

 

按照部署文档中的格式,改完上述代码还不够,需要找到代码

#ServerName www.example.com:443,

将前面#去掉,把代码里面的域名改为你申请证书时的域名。如:

ServerName www.abcdefg.com:443

然后,找到如下代码(将/www/server/apache/cgi-bin改为刚刚DocumentRoot 后面填写的路径"/www/wwwroot/www.abcdefg.com”)。

<Directory "/www/server/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

改为

<Directory "/www/wwwroot/www.abcdefg.com"> 
SSLOptions +StdEnvVars
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>

 

最后,点击保存,并关闭编辑器。(如果有多个项目需要部署,只需在<VirtualHost _default_:443></VirtualHost>之外,再根据新项目的实际情况新增一组<VirtualHost _default_:443></VirtualHost>即可,特别需要注意新增组里面的证书秘钥路径、项目域名、项目根目录路径不能出错。)

3-4 修改httpd.conf文件

设置HTTP请求自动跳转HTTPS(可选配置),对于有强制自动跳转HTTPS需求的情况,只需将下面代码复制粘贴在站点配置中即可。

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]

 

3-5 验证部署结果

完成上述操作之后,重启Apache服务器使SSL配置生效,访问https://你申请证书的域名(如:https://www.abcdefg.com)验证该证书是否安装成功。(如果网页地址栏出现小锁标志,表示证书已经安装成功。)


如果没有生效,安装上述步骤逐一检查,是否有配置错误的情况,比如:

  • 443端口在宝塔中没有放行
  • httpd.conf路径被更改
  • DocumentRoot对应的项目路径不正确
  • Directory里面项目路径未更换或者填写错误
  • 证书和秘钥这三个文件路径不正确
  • 等等

还有一种情况(困扰我很久的问题),如果网站是PHP写的,访问https://域名之后,页面会直接下载php文件,而没有按照预期展示网页内容,出现解析失败的情形,这时则需要打开网站根目录,删除index.html文件,然后在网站的配置文件中加入如下代码:

#PHP
<FilesMatch \.php$>
SetHandler "proxy:unix:/tmp/php-cgi-73.sock|fcgi://localhost"
</FilesMatch>


提交之后,重启Apache服务器使SSL配置生效,访问https://域名,再次验证该证书是否安装成功。

以上。

有关Apache服务器配置SSL证书步骤及问题记录的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  4. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  5. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  6. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  7. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  8. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  9. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  10. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

随机推荐