账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何在本地自建 ssl 证书给 localhost 使用并通过 Chrome 和 Safari 浏览器的验证?
    • 2019-06-20 00:00
    • 10
    66
    0

    前端项目经常需要用到 https 安全连接,为了本地开发方便,我想给 localhost 加上 ssl ,所以我用下面这条命令生成证书和密钥:

    openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out crt.pem

    创建期间所有问题一路回车跳过。接下来还用以下 openssl 命令转换了 pem 文件:

    openssl rsa -outform der -in key.pem -out my.key;
    openssl x509 -outform der -in crt.pem -out my.crt;

    然后我自行把 my.crt 文件导入 Windows 下 Chrome 的 设置-管理证书-受信任的根证书颁发机构 里。最后用 browser-sync 或 http-server 工具打开本地服务器并监听静态目录,访问 https://locahost:8080 依旧显示 您的连接不是私密连接 ,打开标签页证书,可以看到证书导入成功,证书状态是 该证书没有问题

    可是证书依旧是无效的,通过大量网络搜索,确保证书的生成和导入是没问题的,但就是没办法像访问普通 https 链接那样被信任。网上甚至有些文章教怎么设置浏览器不弹出警告,我觉得这是不治本的。所以对网上所说的自定义 ssl 证书可以方便开发的可行性感到疑惑。

    问题:自定义 ssl 证书给 localhost 使用,是否能达到普通 https 网站的连接效果?如果是,请问该如何操作?

    期望:自建 ssl 证书并打开本地服务器,使得 https://locahost:8080 能像普通 https 站点一样,被 Windows 的 Chrome 和 macOS 的 Safari 浏览器信任并正常访问。

    PS:我这个问题被人踩了一下,系统提示我的问题“没有实际价值,缺少关键内容,没有改进余地”,我不是经常来思否可能不是很懂社区规矩。我提问之前已经搜索过没有相似的问题,难道这不算有实际价值?我的步骤、命令和尝试也列出来了,这关键内容难道还不充分?这个问题既然是可以实现的,那就是有改进的余地吧?我不是很明白为什么会被踩一下,希望看到这段话的朋友们在评论里指正我的不足之处,下次提问我注意一下。

    补充:感谢下面两位的回答,我已经成功在本地打开 https 链接了。但是现在有个新的小问题,就是我不能在局域网让其他设备也访问 https://localhost:8080,本来在证书里加上本机的 ip 地址即可,但是公司的 ip 地址是动态分配的,几乎一天一换。于是我想用 Browsersync 做代理,但是代理出来的 https://DynamicIP:8088 仍然显示不安全,这个有什么解决办法么。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 邋遢仙人 普通会员 1楼

      要在本地自建 SSL 证书并将其与 localhost 使用并通过 Chrome 和 Safari 浏览器的验证,请按照以下步骤操作:

      1. 首先,安装以下工具:
      2. OpenSSL
      3. DNS 解析器 (如nslookup)

      4. 安装 OpenSSH:

      5. 安装 OpenSSH: sudo apt-get install openssh-client
      6. 生成 SSL 密钥对: ssh-keygen -t rsa
      7. 使用 SSL 密钥对生成证书: openssl req -new -nodes -keyout /path/to/your/private.key -out /path/to/your/public.key
      8. 保存并替换证书和私钥文件的路径。

      9. 在本地服务器上安装 Apache:

      10. 安装 Apache: sudo apt-get install apache2
      11. 连接到服务器并进入配置文件夹: sudo nano /etc/apache2/sites-available/default
      12. 在文件中添加以下内容: <VirtualHost *:80> ServerName localhost SSLEngine on SSL_certificate /path/to/your/private.key SSL_certificate_key /path/to/your/public.key # Add your SSL settings here </VirtualHost>
      13. 保存并关闭文件。
      14. 配置 Apache 并启用 SSL: sudo a2ensite default sudo service apache2 restart
      15. 在浏览器中输入 http://localhost,您应该看到 SSL 证书的验证消息。

      16. 从互联网上获取 DNS 记录:

      17. 访问 Google DNS (8.8.4.4 或 8.8.8.8) 并设置您的本地服务器为首选DNS服务器。
      18. 在本地服务器上安装 Nginx(或用其他 Web 服务器替代)。
      19. 安装 Nginx 并进入配置文件夹: sudo nano /etc/nginx/sites-available/default
      20. 在文件中添加以下内容: server { listen 80; server_name localhost; root /var/www/html; location / { try_files $uri $uri/ =404; } }
      21. 保存并关闭文件。
      22. 配置 Nginx 并启用 SSL: sudo a2ensite default sudo service nginx restart
      23. 在浏览器中输入 http://localhost,您应该看到 SSL 证书的验证消息。

      请注意,这个过程可能需要一些时间来完成,具体取决于您的本地服务器和互联网速度。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部