linux下实现https访问

本文详细介绍了在Linux环境下,如何通过nginx+ssl实现https访问。从环境准备、下载编译nginx源码、配置启动nginx、生成自签名SSL证书到最后通过https访问web的全过程,针对配置过程中可能出现的问题提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值