91人参与 • 2024-08-06 • SSL
https://nginx.org/
选择你自己需要的版本, 我们这里使用最新版
可以下载本地上传或者直接服务器下载
下载完成后上传至服务器/nginx目录或者直接在服务器下载
先安装通用开发包
yum groupinstall "development tools"
#安装完成后
cd nginx/
#直接在服务器下载命令
#wget https://nginx.org/download/nginx-1.26.0.tar.gz
tar -zxvf nginx-1.26.0.tar.gz
cd nginx-1.26.0/
#prefix设置nginx安装路径 并且开启http和https模块支持
./configure --prefix=/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
#安装完成后启动nginx
/nginx/sbin/nginx
#删除多余安装包
rm -rf nginx-1.26.0*
启动后访问http://ip 如果端口被占用 修改/nginx/conf/nginx.conf中http模块的监听端口
#修改为你自己的目录
mkdir -p /www/server/openssl
cd /www/server/openssl
wget http://www.openssl.org/source/openssl-1.0.0a.tar.gz
tar zxvf openssl-1.0.0a.tar.gz
cd openssl-1.0.0a
#设置openssl的安装路径
./config –prefix=/www/server/openssl
make && make install
注意有可能会报pod2man的错, 删除就行, 没报错就跳过
#删除pod2man
ll /usr/bin/pod2man
rm -f /usr/bin/pod2man
make && make install
mkdir -p /nginx/ssl
cd /nginx/ssl/
1. 生成根证书的私钥
首先,您需要为根证书生成一个私钥。这通常是一个rsa或ec私钥。
* 注意 centos8 秘钥长度低于2048位会报错
openssl genpkey -algorithm rsa -out root_private_key.pem -pkeyopt rsa_keygen_bits:4096
2. 创建根证书的csr和自签名证书
接下来,使用根证书的私钥生成一个证书签名请求(csr),并自签名该csr以生成根证书。
其中cn=my root ca 可以修改为你需要的根域名
# 创建根证书的csr
openssl req -new -key root_private_key.pem -out root_csr.pem -subj "/c=us/st=california/l=san francisco/o=my root ca/cn=my root ca"
在下面的命令中,-extensions v3_ca 指示 openssl 使用名为 v3_ca 的扩展配置。
需要创建一个包含这些扩展的配置文件,并在其中定义 v3_ca 段落
可以写在服务器证书配置的openssl.cnf文件中, 下面为了好区分所以分开写:
vim v3_ca
#添加下面文本
[v3_ca]
basicconstraints = ca:true
keyusage = keycertsign, crlsign
#保存后运行下面命令生成根证书
# 自签名根证书的csr以生成根证书
openssl x509 -req -days 3650 -in root_csr.pem -signkey root_private_key.pem -out root_certificate.pem -extensions v3_ca
3. 生成服务器证书的私钥
现在,需要为服务器证书生成一个单独的私钥。
openssl genpkey -algorithm rsa -out server_private_key.pem -pkeyopt rsa_keygen_bits:2048
4. 创建服务器证书的csr
使用服务器证书的私钥生成一个csr。
将cn=100.70.84.6修改为你自己的域名或ip
如果这里填写的ip/域名和 你服务器访问的ip/域名不匹配,证书始终无效
openssl req -new -key server_private_key.pem -out server_csr.pem -subj "/c=us/st=california/l=san francisco/o=my company/cn=100.70.84.6"
5. 使用根证书签发服务器证书
最后,使用根证书和根证书的私钥签发服务器证书的csr,以生成最终的服务器证书。
在下面的命令中,-extensions v3_req -extfile openssl.cnf 指示 openssl 使用配置文件
(如 openssl.cnf)中定义的 v3_req 段落来添加v3扩展。您需要在配置文件中定义这些扩展,例如:
vim openssl.cnf
#添加以下内容
[v3_req]
keyusage = digitalsignature, keyencipherment
extendedkeyusage = serverauth
subjectaltname = @alt_names
#服务器使用的域名和服务器ip
[alt_names]
dns.1 = feng.com
dns.2 = www.feng.com
dns.2 = *.feng.com
dns.2 = 100.70.84.6
ip.1 = 100.70.84.6
#保存后生成服务器证书
openssl x509 -req -in server_csr.pem -ca root_certificate.pem -cakey root_private_key.pem -cacreateserial -out server_certificate.pem -days 3650 -extensions v3_req -extfile openssl.cnf
6. 验证证书
最后,您可以验证生成的根证书和服务器证书。
# 验证根证书
openssl x509 -in root_certificate.pem -text -noout
# 验证服务器证书
openssl x509 -in server_certificate.pem -text -noout
请注意,这只是一个基本的示例,用于生成根证书和基于该根证书的服务器证书。
在实际应用中,可能需要根据您的具体需求和环境进行更多的配置和调整。
特别是,您需要确保您的私钥得到妥善保管,不要将其泄露给未经授权的人员。
vim /nginx/conf/nginx.conf
#在http标签中添加https模块
server {
listen 443 ssl;
server_name 100.70.84.6 feng.com www.feng.com;
ssl_certificate /nginx/ssl/server_certificate.pem;
ssl_certificate_key /nginx/ssl/server_private_key.pem;
ssl_session_cache shared:ssl:1m;
ssl_session_timeout 5m;
ssl_protocols tlsv1.2 tlsv1.3;
ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:high:!anull:!md5:!rc4:!dhe;
ssl_prefer_server_ciphers on;
location / {
#proxy_pass http://100.70.84.6:20157;
root html;
index index.html index.htm;
}
}
完整配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
# http server
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# https server
server {
listen 443 ssl;
server_name 100.70.84.6 feng.com www.feng.com;
#生成的ssl证书
ssl_certificate /nginx/ssl/server_certificate.pem;
#证书秘钥
ssl_certificate_key /nginx/ssl/server_private_key.pem;
ssl_session_cache shared:ssl:1m;
ssl_session_timeout 5m;
ssl_protocols tlsv1.2 tlsv1.3;
ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:high:!anull:!md5:!rc4:!dhe;
ssl_prefer_server_ciphers on;
location / {
#proxy_pass http://100.70.84.6:20157;
root html;
index index.html index.htm;
}
}
}
重载nginx
/nginx/sbin/nginx -s reload
常用nginx命令
启动
/nginx/sbin/nginx
重载配置
/nginx/sbin/nginx -s reload
停止nginx
/nginx/sbin/nginx -s stop
由于自签证书不是可信任的ca机构签发, 所以需要手动安装
*注意安装的是根证书root_certificate.pem , 不是服务器使用的server_certificate.pem
正式生产环境可以在阿里云或腾讯云免费申请证书使用
生产nginx配置https也是一样的,跳过openssl生成自签证书即可
查看证书信息,这里的颁发者就是我们上面生成的 root_certificate.pem 根证书
从服务器下载根证书进行安装.
注意不是服务器的证书, 因为服务器证书中不包含根证书信息
所以就算导出证书安装后也是一样无法正常使用
将root_certificate.pem转换为windows可以识别的crt文件
cd /nginx/ssl
cp root_certificate.pem 100.70.84.6.crt
将证书保存本地
保存后win+r打开窗口输入certlm.msc
点击受信任的根证书颁发机构–>证书
选择从服务器下载的证书文件
导入成功后, 关闭浏览器再重新访问服务器
可以看到https访问已经没问题了
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论