首页 > 系统相关 >使用nginx搭建https服务器

使用nginx搭建https服务器

时间:2023-06-13 17:03:37浏览次数:60  
标签:https 证书 ca openssl server nginx key 服务器 生成



最近在研究nginx,整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的,防止中间监听泄露信息,但是去证书服务商那边申请证书又不合算,因为访问服务器的都是内部人士,所以自己给自己颁发证书,忽略掉浏览器的不信任警报即可。下面是颁发证书和配置过程。

首先确保机器上安装了openssl和openssl-devel

#yum install openssl
#yum install openssl-devel

然后就是自己颁发证书给自己

#cd /usr/local/nginx/conf 

#openssl genrsa -des3 -out server.key 1024 

#openssl req -new -key server.key -out server.csr (证书各个字段介绍见最后) 

#openssl rsa -in server.key -out server_nopwd.key 

#openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt



至此证书已经生成完毕,下面就是配置nginx

server { 

 listen 443; 

 ssl on; 

 ssl_certificate /usr/local/nginx/conf/server.crt; 

 ssl_certificate_key /usr/local/nginx/conf/server_nopwd.key; 

} 



------ 


server { 

 listen 443; 

 server_name www.test.com; 

 ssl on; 

 ssl_certificate /etc/nginx/ssl/server.crt; 

 ssl_certificate_key /etc/nginx/ssl/server_nopwd.key; 


 location / { 

 proxy_pass http://10.100.142.63:8082/; 

 } 

} 

server { 

 listen 80; 

 server_name www.test.com; 

 rewrite ^(.*)$ https://$host$1 permanent; 

}



------
然后重启nginx即可。

ps: 如果出现“[emerg] 10464#0: unknown directive "ssl" in /usr/local/nginx-0.6.32/conf/nginx.conf:74”则说明没有将ssl模块编译进nginx,在configure的时候加上“--with-http_ssl_module”即可^^

至此已经完成了https服务器搭建,但如何让浏览器信任自己颁发的证书呢?

今天终于研究捣鼓出来了,只要将之前生成的server.crt文件导入到系统的证书管理器就行了,具体方法:

控制面板 -> Internet选项 -> 内容 -> 发行者 -> 受信任的根证书颁发机构 -> 导入 -》选择server.crt
===================================生成签名字段说明======
生成证书时,需输入识别证书持有者身份的信息,下表是关于它们的缩写、说明和一些填写说明。【此部分参考了互动百科的SSL条目】(带"*"重要,必填)
DN字段名
缩写 说明(我的信息) 填写要求
Country Name C 证书持有者所在国家(CN) *要求填写国家代码,用2个字母表示
State or Province Name ST 证书持有者所在州或省份(zhejiang) 填写全称,可省略不填
Locality Name L 证书持有者所在城市(hangzhou) 可省略不填
Organization Name O 证书持有者所属组织或公司(xxx) *最好还是填一下
Organizational Unit Name OU 证书持有者所属部门(no) 可省略不填
Common Name CN 证书持有者的通用名(XXX.com) *必填。
对于非应用证书,它应该在一定程度上具有惟一性;
对于应用证书,一般填写服务器域名或通配符样式的域名。
Email Address 证书持有者的通信邮箱([email protected]) 可省略不填

注意:证书的详细信息-使用者或颁发者中出现一些明明没有设置过的信息时,请检查openssl.cnf [req_distinguished_name],注释掉*_default的参数.

B.用CA签名认证

1.创建server待签名证书私匙

因为这里只是用于测试,这里选择1024强度.


openssl genrsa -aes128 -out server.key 1024

注意:golang中使用https时需另从密钥对中提取私钥"openssl rsa -in server.key -out server_pri.key.

2. 生成 csr 文件(证书请求文件)

openssl req -new -key server.key -out server.csr

此时,在common name中填入网站域名,如blog.xxx.net即可生成该站点的证书,同时也可以使用泛域名如*.xxx.net来生成所有二级域名可用的网站证书.多域名证书可通过修改openssl.cnf生成.

其他说明:"Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #加密证书请求的密码,证书请求需要在网络上传递,所以加密防止别人窥探,一般不用填
An optional company name []: #不清楚,不用填
"时,
=========================================
概念:

1. 数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构或证书授权中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

2. CSR是Cerificate Signing Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。


SSL生成证书流程
server生成私钥server.key--> 生成csr -> +(ca.key+ca.crt)-> 生成证书server.crt
/
CA导出私钥(ca.key)和证书(ca.crt)
\
client生成私钥client.cky--> 生成csr -> +(ca.key+ca.crt)-> 生成证书client.crt

步骤:

A. 制作CA证书

1. 制作ca.key CA私钥:


openssl genrsa -des3 -out ca.key 2048

ca.key是密钥文件名,是生成的rsa私钥,des3算法,openssl格式,2048位强度;-out指定生成文件的文件名。

注意:这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密。后面的2048是生成密钥的长度。

为了生成这样的密钥,默认中间需要输入一个密码(适用于有安全需求的场合)。可以通过以下方法生成没有密码的key(其实就是从密钥对中提取了私钥,一般无此必要):


openssl rsa -in ca.key -out ca.key ##此时生成的ca.key没有密码

2.用CA私钥进行自签名,得到自签名的CA根证书


openssl req -new -x509 -days 365 -key ca.key -out ca.crt ##这里及下面的ca.key均带密码

注意:碰到"Unable to load config info from /usr/local/ssl/openssl.cnf"时,请下载一个可用的openssl.cnf,并追加参数"-config openssl.cnf路径"即可.

"req":openssl子命令,用于生成证书;"-new":生成新的证书请求;"-days 365":从生成之时算起,证书时效为365天(仅当使用-x509选项后有效);"-x509":生成自签名证书,没有该项时表示生成csr.

生成证书时,需输入识别证书持有者身份的信息,下表是关于它们的缩写、说明和一些填写说明。【此部分参考了互动百科的SSL条目】(带"*"重要,必填)
DN字段名
缩写 说明(我的信息) 填写要求
Country Name C 证书持有者所在国家(CN) *要求填写国家代码,用2个字母表示
State or Province Name ST 证书持有者所在州或省份(zhejiang) 填写全称,可省略不填
Locality Name L 证书持有者所在城市(hangzhou) 可省略不填
Organization Name O 证书持有者所属组织或公司(xxx) *最好还是填一下
Organizational Unit Name OU 证书持有者所属部门(no) 可省略不填
Common Name CN 证书持有者的通用名(XXX.com) *必填。
对于非应用证书,它应该在一定程度上具有惟一性;
对于应用证书,一般填写服务器域名或通配符样式的域名。
Email Address 证书持有者的通信邮箱([email protected]) 可省略不填

注意:证书的详细信息-使用者或颁发者中出现一些明明没有设置过的信息时,请检查openssl.cnf [req_distinguished_name],注释掉*_default的参数.

B.用CA签名认证

1.创建server待签名证书私匙

因为这里只是用于测试,这里选择1024强度.


openssl genrsa -aes128 -out server.key 1024

注意:golang中使用https时需另从密钥对中提取私钥"openssl rsa -in server.key -out server_pri.key.

2. 生成 csr 文件(证书请求文件)

openssl req -new -key server.key -out server.csr

此时,在common name中填入网站域名,如blog.xxx.net即可生成该站点的证书,同时也可以使用泛域名如*.xxx.net来生成所有二级域名可用的网站证书.多域名证书可通过修改openssl.cnf生成.

其他说明:"Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #加密证书请求的密码,证书请求需要在网络上传递,所以加密防止别人窥探,一般不用填
An optional company name []: #不清楚,不用填
"时,

3.为 csr 文件签名,生成证书

openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in server.csr -out server.crt

参数说明:

ca //使用openssl的ca子命令
-in server.csr //指定待签发证书的 CSR文件为 server.csr
-out server.crt //指定输出所签发证书的信息到文件,且文件名为server.crt
-cert ca.crt //指定为证书签名的CA的公钥证书为ca.crt【用到CA证书的持有者信息】
-keyfile ca.key //指定为证书签名的CA的私钥文件为ca.key【用CA私钥实际执行签名】
-days 365 //指定所签发证书的有效期为365天(1年),不允许超过ca.crt的有效期
-policy policy_anything //指定签发策略为 policy_anything 【即,允许所签发证书的持有者信息和颁发者信息之间不遵守任何匹配策略】
-md //指定签名哈希算法[默认是openssl.cnf中的default_md]

如果ca.key没有密码,以上命令后输入两次”y”,即可生成server.crt.

错误:

1."“I am unable to access the..."

按照openssl.cnf里的[CA_default]定义
mkdir -p demoCA/newcerts
touch ./demoCA/index.txt
echo "01" > demoCA/serial #颁发证书时使用的序列号,使用后会递增.重置serial时,需清空newcerts文件夹和index.txt

C. 导入证书

将ca.crt导入自己的操作系统即可(证书[未导入前]上有提示导入到哪个项目下).


ps:

Mozilla、思科、Akamai、IdenTrust、EFF和密歇根大学研究人员宣布了 Let’s Encrypt CA项目,计划为网站提供免费SSL证书,加速将Web从HTTP过渡到HTTPS(从2015夏开始,详细:http://linux.cn/article-4254-1.html).

SSL证书详解--数字签名和数字证书 http://www.livyfeel.com/ssl/

其他参考:https://linux.cn/article-5443-1.html

标签:https,证书,ca,openssl,server,nginx,key,服务器,生成
From: https://blog.51cto.com/u_16080829/6471593

相关文章

  • 通过堡塔部署API到云服务器
     首先登录堡塔的官网:https://www.bt.cn/new/index.html,下载终端  下载完后安装终端,路径不用修改,安装到默认盘。安装完成后打开堡塔终端,图片如下  点击+号,添加服务器   我使用的是阿里云,服务器地址如下  登录云服务器的密码如下,  点击远程连接......
  • 服务器巡检常用命令
    Linux系统需要定期巡检,以检查服务器软硬件使用情况,确保可以及时发现问题、解决问题,降低损失。常用的巡检命令如下:free-m查看内存使用量和交换区使用量df-h查看各分区使用情况du-sh<目录名>查看指定目录的大小uptime查看系统运行时间、用户数、负载w查看活动用户l......
  • nginx rewrite实践
    nginxrewrite跳转(高级)官网https://nginx.org/en/docs/http/ngx_http_rewrite_module.html该ngx_http_rewrite_module模块用于使用PCRE正则表达式更改请求URI、返回重定向和条件选择配置。 1.介绍实际工作需求中,我们经常要修改用户url的请求比如早期的京东官......
  • nginx location实战
    nginxlocation高级实战location是nginx的核心重要功能,可以设置网站的访问路径,一个webserver会有多个路径,那么location就得设置多个。Nginx的locaiton作用是根据用户请求的URI不同,来执行不同的应用。针对用户请求的网站URL进行匹配,匹配成功后进行对应的操作。官网......
  • nginx添加第三方模块
    1.理念nginx除了支持内置模块,还支持第三方模块,但是第三方模块需要重新编译进nginx。(重新生成nginx二进制命令)1.如你的nginx默认不支持https2.给你的nginx添加echo模块,用于打印nginx的变量。 2.编译添加echo模块echo-nginx-module 模块可以在Nginx中用来输出一些信息......
  • nginx访问限制
    连接数监控官网文档http://nginx.org/en/docs/http/ngx_http_stub_status_module.html模块介绍该ngx_http_stub_status_module模块提供对基本状态信息的访问。默认情况下不构建此模块,应使用--with-http_stub_status_module配置参数启用它。 Nginx状态信息(status)介......
  • 云原生之使用docker部署nginx网站
    (云原生之使用docker部署nginx网站)一、检查本地系统版本[root@node~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME="CentOSLinux7(Core)"......
  • IBM Cloud:裸金属服务器+多云策略助力音视频解决方案成功出海
    到底什么是公有云、私有云和混合云?疫情给云服务厂商带来了哪些挑战?IBM是如何助力音视频解决方案成功出海的?“后疫情”时代音视频的下一个风口在哪里?对此,LiveVideoStack很荣幸地采访到了来自IBM云平台事业部,资深云计算架构师——胡磊,聊一聊他对这些问题的看法和观点。胡磊技术访谈#0......
  • nginx日志切割
    日志切割(shell脚本)nginx日志默认是不切割的,网站运行久了自然生成大量日志,导致单文件的处理,太麻烦,因此工作里一般定期切割,一般按天切割。-rw-r--r--1rootroot2.1GMay813:57front_access.log 先纯手动的去切割日志,备份日志1.给nginx进程发送信号,让nginx重新......
  • ELK分析Nginx日志和可视化展示
    ELK分析Nginx日志和可视化展示JAVA编程Linux学习 2023-06-0508:35 发表于山东收录于合集#nginx5个#nginx日志可视化1个#nginx日志1个一、概述使用ELK收集nginxaccess日志,利用Grafana做出一套可视化图表 二、环境准备环境说明操作系统:centos7.6docker......