[网站]_[初级]_[配置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 集成工具包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Peter(阿斯拉达)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值