linux下实现https访问

2023-05-16

http转https--适用于linux服务器

  • linux下nginx+ssl实现https访问
    • (一)环境准备
    • (二)下载nginx源码,编译nginx并添加ssl模块
    • (三)配置并启动nginx,用http来访问web
    • (四)生成自签名SSL证书
    • (五)配置并启动nginx,用https来访问web
    • CA在签证时会出现如下错误,解决方法:

linux下nginx+ssl实现https访问

(一)环境准备

要编译nginx源码和生成ssl证书,需要linux环境下安装依赖模块:

yum -y install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel 

(二)下载nginx源码,编译nginx并添加ssl模块

目前nginx默认版本中没有http_ssl_module模块,所以需要在nginx官网下载最新的nginx源码,然后编译nginx并添加SSL模块。

这里可以选择最新的稳定版本,例如:nginx-1.22.1,下载源码包nginx-1.22.1.tar.gz;然后将下载的nginx源码拷贝到linux服务器上一个自定义目录中,进入该目录,然后解压nginx源码sudo tar -xzvf nginx-1.22.1.tar.gz。 进入解压后的目录cd nginx-1.22.1

执行以下命令进行nginx源码编译配置:

./configure --prefix=./nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre

注意:–prefix配置的是nginx的安装目录,这里配置安装到当前目录,–with配置是编译nginx时额外添加的模块,这里主要添加了http_ssl_module,其他模块可以选择安装。

执行以下命令编译并安装nginx:

make && make install

安装完成后,在–prefix指定的目录下会有刚编译好的nginx文件夹,进入文件夹,目录结构如下:

 nginx
├── conf
├── html
├── logs
└── sbin

看到编译后的目录结构,正是我们日常使用的nginx,到此nginx就安装成功。

(三)配置并启动nginx,用http来访问web

将准备好的网页拷贝到linux服务器中,配置conf/nginx.conf:

server {
    listen       89;
    server_name  localhost;

    root /home/web/https/site/index.html;
}

启动nginx,通过127.0.0.1:89访问刚部署好的网页:

由于使用http进行访问,被认为是不安全的

由于nginx上没有配置SSL证书相关的内容,网页的访问仍然是http1.0的协议,高版本浏览器会标记该网页不安全。 如果我们强行使用https访问,则得到如下结果:

在这里插入图片描述

(四)生成自签名SSL证书

由于https需要SSL证书,一般来说,SSL证书需要购买才能真正使用,这里我们只是为了验证可以通过nginx配置来使用https访问网页,因为是本地环境,直接用OpenSSL给自己颁发一个CA根证书用于后面给服务器做CA签署。

1. 生成CA密钥
openssl genrsa -des3 -out ca.key 2048

2. 生成CA根证书
openssl req -sha256 -new -x509 -days 365 -key ca.key -out ca.crt
以上命令生成时候要填很多东西 一个个看着写吧【最好同第4步的信息保持一致,特别是Common Name,对应-subj的CN字段】

证数各参数含义如下:
C-----国家(Country Name)
ST----省份(State or Province Name)
L----城市(Locality Name)
O----公司(Organization Name)
OU----部门(Organizational Unit Name)
CN----产品名(Common Name),代表要授权签发证书的服务器IP
emailAddress----邮箱(Email Address)

如果怕输入错误,可以在上述命令后面直接添加以下命令,显示指定相关信息
 -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=study/CN=172.16.129.89"

3. 生成服务器秘钥
openssl genrsa -des3 -out server.key 2048
然后他会要求你输入这个key文件的密码。不推荐输入。因为以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的。
由于生成时候必须输入密码。你可以通过以下命令删除密码。
openssl rsa -in server.key -out server.key

4.生成服务器证书请求文件
openssl req -new -sha256 -key server.key  -out server.csr
以上命令生成时候要填很多东西 一个个看着写吧【最好同第2步的信息保持一致,特别是Common Name对应-subj的CN字段】
如果怕输入错误,可以在上述命令后面直接添加以下命令,显示指定相关信息
 -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=study/CN=172.16.129.89"
 CN(Common Name)代表要授权签发证书的服务器IP
 
5. CA签署服务器证书
openssl ca -in server.csr -md sha256 -keyfile ca.key -cert ca.crt -out server.crt

生成CA根证书:
在这里插入图片描述

执行完毕后,会在输出目录里面生成ca.key 、 ca.crt 、 server.key 、 server.crt四个证书文件。

证数各参数含义如下:

C-----国家(Country Name)
ST----省份(State or Province Name)
L----城市(Locality Name)
O----公司(Organization Name)
OU----部门(Organizational Unit Name)
CN----产品名(Common Name)
emailAddress----邮箱(Email Address)

(五)配置并启动nginx,用https来访问web

最后一步,我们已经生成了自己的sll证书,接下来就可以配置nginx.conf:

server {
    listen       443 ssl;

    ssl_certificate server.crt; #根据具体的路径配置即可
    ssl_certificate_key server.key; #根据具体的路径配置即可

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout 5m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        root /home/web/https/site/;
        index  index.html index.htm;
    }
}

其中443是https的默认端口(http的默认端口是80),现在,你可以通过https://172.16.129.89来访问你的网页了。

CA在签证时会出现如下错误,解决方法:

/etc/pki/CA/newcerts: No such file or directory

[root@station23 test]# mkdir /etc/pki/CA/newcerts
[root@station23 test]# openssl ca -in my.csr -out ldap.crt

Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/index.txt: No such file or directory
unable to open ‘/etc/pki/CA/index.txt’
23016:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen(‘/etc/pki/CA/index.txt’,‘r’)
23016:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:

[root@station23 test]# touch /etc/pki/CA/index.txt
[root@station23 test]# openssl ca -in my.csr -out ldap.crt

Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/serial: No such file or directory
error while loading serial number
23031:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen(‘/etc/pki/CA/serial’,‘r’)
23031:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:

[root@station23 test]# touch /etc/pki/CA/serial
[root@station23 test]# echo 00 > /etc/pki/CA/serial
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux下实现https访问 的相关文章

  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 通过 HTTPS 加载页面但请求不安全的 XMLHttpRequest 端点

    我有一个页面 上面有一些 D3 javascript 该页面位于 HTTPS 网站内 但证书是自签名的 当我加载页面时 我的 D3 可视化效果不显示 并且出现错误 混合内容 页面位于 https integration jsite com
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • 如何调用位于其他目录的Makefile?

    我正在尝试这样做 我想打电话给 make Makefile存在于其他目录中 abc可以使用位于不同目录中的 shell 脚本的路径 我该怎么做呢 由于 shell 脚本不允许我cd进入Makefile目录并执行make 我怎样才能编写she
  • 如何禁用 HTTP 的 HSTS 标头?

    我已将以下内容插入到我网站的 htaccess 中 以便能够访问HSTS预加载列表 https hstspreload appspot com
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign

随机推荐