[网站]_[初级]_[配置Apache支持https访问-自签名证书还是提示错误的问题]

Posted infoworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[网站]_[初级]_[配置Apache支持https访问-自签名证书还是提示错误的问题]相关的知识,希望对你有一定的参考价值。

场景

  1. 现在的网站基本都是需要支持https,不然会被谷歌系浏览器给出以下警告. 虽然可以点击继续前往,但是如果跳转到这个网站的其他页面又会有相同的警告,导致打开网页失败,总不能一个个页面去点继续前往。怎么处理?
您的连接不是私密连接
...
NET:ERR_CERT_AUTHORITY_INVALID
...

在这里插入图片描述

在这里插入图片描述

  1. 在给本地网站进行测试时,需要配置https支持,那么需要配置服务器证书,用于https请求的加密。参考网上的文章配置的基本都是生成CA私钥和Server公钥的, 按照其做法还是出现您的连接不是私密连接的问题。

说明

  1. 生成自签名的测试证书并不需要提交给CA进行认证. 只需要在客户端进行导入信任的证书即可。这里只介绍Windows的证书导入,Linux的应该是类似的。

  2. 生成密钥和证书的工具有openssl.exe, 以Apache为例,可以在Apache24\\bin\\openssl.exe找到这个工具。注意,这个Apache24Apache安装目录。 关于下载Windows版本的Apache,可以单独下载Apache的压缩包(绿色软件)[4]。也可以下载XAMPP的打包好php+Apache+mysql的集成安装包[5]。当然也可以去Apache Httpd官网点击important notes。 我下载的是绿色版的单独的httpd压缩包,之后解压到某个目录。

  3. 生成自签名的证书,需要一个测试用的域名,比如mysite1.com, 访问本地网站的时候可以通过https://mysite1.com来访问。可以修改这个例子域名指向我们的127.0.0.1本地ip. 通过修改C:\\Windows\\System32\\drivers\\etc\\hosts,注意这个文件需要复制到桌面修改完之后再覆盖原文件,不然保存会失败。文件最后增加一行

127.0.0.1 mysite1.com
127.0.0.1 www.mysite1.com
  1. 需要在Apache24\\conf\\openssl.cnf里启用v3_req扩展和增加一个关键属性配置subjectAltName

    • 启用v3_req扩展, 搜索文件里的内容v3_req, 把#注释去掉。

       req_extensions = v3_req # The extensions to add to a certificate request   
      
    • [ v3_req ]下增加以下的配置,主义,DNS.1增加你的域名配置,如果需要只支持某个二级域名,那么可以可以代替*符号, 比如shop.mysite1.com

      basicConstraints = CA:FALSE
      keyUsage = nonRepudiation, digitalSignature, keyEncipherment
      
      # 以下是增加的
      subjectAltName = @alt_names
      
      [ alt_names ]
      DNS.1 = *.mysite1.com
      DNS.2 = mysite1.com
      
  2. 生成私钥,公钥和证书的步骤如下,Win+R输入cmd回车,进入命令行。之后进入Apache24\\bin所在的目录,为了可以在命令行运行openssl.exe生成ca.keyserver.keyserver.crt3个文件。

    • 生成CA私钥:
      openssl genrsa -out ca.key 2048
      
    • 生成server公钥
      openssl rsa -in ca.key -out server.key
      
    • 生成证书
      openssl req -new -subj "/CN=*.mysite1.com" -x509 -days 3650 -key server.key -out server.crt -config ../conf/openssl.cnf -extensions v3_req
      
  3. 把生成的server.crtservier.key复制覆盖Apache24\\conf\\ssl\\目目录下。并在你的Apache24\\conf\\extra\\httpd-ahssl.conf下的VirtualHost里增加启用SSLEngine,并且配置使用这两个文件。注意: ServerName的值要填测试域名mysite1.com

<VirtualHost _default_:443>
    SSLEngine on
    SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
    SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
    ServerName mysite1.com
    ...
</VirtualHost>

httpd-ahssl.conf默认已经有配置好的htdocs例子,可以直接修改ServerName的值.

<VirtualHost _default_:443>
  SSLEngine on
  ServerName mysite1.com
  SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
  SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
  DocumentRoot "${SRVROOT}/htdocs"
# DocumentRoot access handled globally in httpd.conf
	CustomLog "${SRVROOT}/logs/ssl_request.log" \\
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\"%r\\" %b"
	<Directory "${SRVROOT}/htdocs">
		Options Indexes Includes FollowSymLinks
		AllowOverride AuthConfig Limit FileInfo
    Require all granted
	</Directory>
</virtualhost>
  1. 如果已经配置SSLVirtualHost的话,直接就加上上边4行即可,如果没有配置SSL扩展支持,那么还需要修改在Apache24\\conf\\httpd.conf文件,有以下步骤:

    • 搜索相关SSL/TLS的模块配置位置,添加或去掉注释,我的httpd2.4.48默认启用的.
      # Secure (SSL/TLS) connections
      # Note: The following must must be present to support
      #       starting without SSL on platforms with no /dev/random equivalent
      #       but a statically compiled-in mod_ssl.
      #
      <IfModule ssl_module>
      #Include conf/extra/httpd-ssl.conf
      Include conf/extra/httpd-ahssl.conf
      SSLRandomSeed startup builtin
      SSLRandomSeed connect builtin
      </IfModule>
      
    • 同样,如果没有加载以下扩展,也要去掉注释启用。
      LoadModule ssl_module modules/mod_ssl.so
      
    • 配置正确的SRVROOT值为你的Apache httpd的正确安装绝对路径,使用/.
      Define SRVROOT "E:/software/Apache24/"
      
  2. 安装证书,以便浏览器能使用公钥进行签名. 双击server.crt,安装证书并选择把证书放入受信任的根证书颁发机构。因为以上并没有申请第三方CA颁发证书,所以我们把自己的证书作为根证书,这样浏览器就不会自下而上的去检查证书。

在这里插入图片描述

  1. 安装好证书之后,需要检查证书是否正确安装. Windows系统快捷键Win+R, 输入certmgr.msc回车, 检查受信任的根证书颁发机构里有没有你颁发的对应网站的颁发者.

在这里插入图片描述

  1. 双击Apache24/bin/httpd.exe启动Apache httpd,之后通过https://mysite1.com访问本地网站。如果启动有错误,可以看Apache24\\logs下的error.log文件查找原因。如果启动之后还是显示您的连接不是私密连接,那么关闭浏览器重新打开。

在这里插入图片描述

其他

  1. 如果是发布的网站,那么需要获取权威机构颁发的证书,需要先得到私钥的key文件(.key),然后使用私钥的key文件生成sign req 文件(.csr),最后把csr文件发给权威机构,等待权威机构认证,认证成功后,会返回证书文件(.crt)

本地方式的:

openssl req -new -subj "/CN=local" -config ../conf/openssl.cnf -key ca.key -out ca.csr

需要提交认证的:

openssl req -new -config ../conf/openssl.cnf -key ca.key -out ca.csr
  1. subjectAltName指定了附加的主题标识,但用于主机名.。CN只在subjectAltName不存在且仅为了与旧的、不兼容的软件兼容时进行评估。因此,如果您设置了subjectAltName,就必须将其用于所有主机名。

参考

  1. 记自签ssl证书在Chrome下无法访问

  2. subjectAltName

  3. OpenSSL生成root CA及签发证书

  4. Apache Httpd 2.4.48 Windows版本官方压缩包

  5. XAMPP 集成工具包

以上是关于[网站]_[初级]_[配置Apache支持https访问-自签名证书还是提示错误的问题]的主要内容,如果未能解决你的问题,请参考以下文章

Dedecms配置_常用操作配置_网站栏目管理

[JavaScript]_[初级]_[如何实现图片的滚动懒加载]

[JavaWeb]_[初级]_[如何更换免费网站字体]

[JavaWeb]_[初级]_[如何更换免费网站字体]

[JavaWeb]_[初级]_[如何更换免费网站字体]

[C/C++11]_[初级]_[获取CPU支持的最合适的核心线程数]