`
MauerSu
  • 浏览: 509289 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用nginx搭建https服务器

 
阅读更多
源:http://www.cnblogs.com/tintin1926/archive/2012/07/12/2587311.html
http://my.oschina.net/meilihao/blog/337087
评:

最近在研究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   证书持有者的通信邮箱(xxx@xxx.com) 可省略不填

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

B.用CA签名认证

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

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

?
1

openssl genrsa -aes128 -out server.key 1024

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

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

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文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

参考:http://blog.csdn.net/howeverpf/article/details/21622545

http://www.cnblogs.com/littlehann/p/3738141.html

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私钥:

?
1

openssl genrsa -des3 -out ca.key 2048

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

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

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

?
1

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

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

?
1

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   证书持有者的通信邮箱(xxx@xxx.com) 可省略不填

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

B.用CA签名认证

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

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

?
1

openssl genrsa -aes128 -out server.key 1024

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

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

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 文件签名,生成证书
?
1

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

参数说明:
?
1
2
3
4
5
6
7
8

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]定义
?
1
2
3

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
分享到:
评论

相关推荐

    Nginx搭建https服务器1

    Nginx搭建https服务器 Nginx是一款流行的开源Web服务器软件,它支持多种协议,包括HTTP、HTTPS、SMTP、POP3等。在这篇文章中,我们将讲解如何使用Nginx搭建一个HTTPS服务器。 一、为什么需要HTTPS? HTTPS...

    nginx搭建文件服务器上传文件获取文件

    ### Nginx 搭建文件服务器:上传与获取文件 在互联网技术中,Nginx 被广泛用于构建高性能、稳定的Web服务器环境。本文将详细介绍如何利用 OpenResty + Nginx + Lua 实现一个文件服务器,该服务器支持文件上传与获取...

    nginx搭建https服务器.docx编程资料

    ### Nginx 搭建 HTTPS 服务器详解 #### 一、HTTPS 协议简介 HTTPS(HyperText Transfer Protocol Secure)是一种基于 SSL/TLS 协议的 HTTP 安全版本,通过在 HTTP 基础上增加 SSL 层来实现数据加密传输。这不仅...

    实战Nginx搭建高性能Web服务器

    Nginx是一款高性能的...总的来说,实战Nginx搭建高性能Web服务器需要理解Nginx的工作机制,掌握配置文件的编写,以及如何利用其反向代理和负载均衡能力。通过合理配置和优化,Nginx能为企业提供稳定、高效的Web服务。

    Nginx搭建图片服务器(静态资源缓存服务器).zip

    在本教程中,我们将探讨如何利用Nginx搭建一个专门用于处理图片的静态资源缓存服务器。这个过程主要包括Nginx的安装、配置以及设置缓存策略,以提高图片加载速度和服务器性能。 首先,为了安装Nginx,我们需要在...

    Nginx搭建https服务器教程

    HTTPS简介 HTTPS(Hypertext Transfer Protocol over Secure...要设置安全服务器,使用公共钥创建一对公私钥对。大多数情况下,发送证书请求(包括自己的公钥),你的公司证明材料以及费用到一个证书颁发机构(CA).CA验证

    cpp-nginxvideoserver一键搭建NGINX视频服务器支持rmtpmp4等

    标题 "cpp-nginxvideoserver一键搭建NGINX视频服务器支持rmtpmp4等" 提到的是一个使用C++编写的工具或脚本,用于快速配置和部署一个支持RTMP(Real-Time Messaging Protocol)和MP4格式的NGINX视频服务器。NGINX是一...

    linux服务器Java和nginx的搭建

    ### Linux服务器上Java环境与Nginx的搭建详解 #### 一、Java环境搭建 ##### 1. 使用Yum安装JDK 对于Linux系统来说,使用包管理工具(如yum)来安装JDK是一种非常方便的方式。以下是具体的步骤: - **查看可用版本...

    Linux下通过Nginx搭建RTMP流媒体服务器需要的一系列源码包

    压缩包里包含了: Linux下通Nginx搭建RTMP流媒体服务器需要的一系列源码包。 搭建方法可以参考博文: https://blog.csdn.net/xiaolong1126626497/article/details/105378894

    用nginx搭建简单的文件下载服务器的方法

    要使用Nginx搭建文件下载服务器,首先需要确保你的服务器环境已经安装了Nginx。Nginx的安装过程相对简单,可以通过官网下载对应操作系统的安装包进行安装,或者通过包管理器安装,例如在Ubuntu中使用命令“sudo apt-...

    nginx搭建rtmp协议流媒体服务器

    在Linux环境下,我们可以通过以下步骤使用Nginx 1.6.3版本来搭建RTMP协议的流媒体服务器。** 首先,我们需要**下载Nginx的1.6.3版本**。`nginx-1.6.3.tar.gz`这个文件就是我们需要的源码包,它是Nginx的一个旧版本...

    window nginx搭建文件下载服务器

    Window Nginx搭建文件下载服务器 Nginx是一款功能强大且轻量级的Web服务器软件,它支持多种操作系统,包括Windows、Linux和macOS等。在本文中,我们将讲解如何使用Nginx在Windows平台上搭建文件下载服务器。 什么...

    在Linux和Windows下用nginx搭建的web服务器.rar

    本教程将详细介绍如何在Linux和Windows操作系统上使用Nginx搭建Web服务器,并在Windows环境下设置Nginx服务为开机自动启动。 首先,我们来了解一下Nginx的基本概念。Nginx采用事件驱动的异步非阻塞模型,能有效处理...

    weblogic集群安装及nginx https反向代理及负载均衡配置

    - **数据库服务器准备**:在数据库服务器上准备必要的数据库实例,以便 WebLogic Server 使用。这通常包括创建表和初始化数据。 - **上传 createDB.tar.gz**:将包含数据库初始化脚本的压缩包上传至数据库服务器,并...

    使用nginx与nginx-rtmp-module搭建流媒体服务器

    ### 使用Nginx与Nginx-rtmp-module搭建流媒体服务器 #### 一、概述 随着互联网技术的发展,实时视频传输的需求日益增加。对于希望搭建流媒体服务器的应用场景而言,Nginx 和 Nginx-rtmp-module 成为了一个非常高效...

    Linux实验-自动部署Nginx+PHP服务器.rar

    在IT行业中,Linux系统是广泛...总之,通过本次实验,你可以学习到Linux服务器管理、Nginx与PHP的部署及交互,以及如何使用shell脚本自动化这些过程,这对于成为一名合格的运维工程师或者开发者都是非常重要的技能。

Global site tag (gtag.js) - Google Analytics