制作能在nginx和IIS中使用的ssl证书


Posted in Servers onJune 21, 2021
目录
  • 制作SSL证书
    • 1、生成私钥Key
    • 2、生成证书请求文件
    • 3、生成crt证书文件
    • 4、生成pfx证书安装包
  • Nginx配置使用证书
  • IIS配置使用证书   
  • 程序中使用证书

  如果觉得证书制作比较麻烦,这里是本文制作好的证书:https://pan.baidu.com/s/1MJ5YmuZiLBnf-DfNR_6D7A (提取码:c6tj),密码都是:123456

  园友可下载证书,然后根据后文nginx和IIS的使用方法来使用证书。

 

制作SSL证书

  好了,先创建一个空目录,在这个空目录下开始制作:

 

1、生成私钥Key

  执行下面的命令生成私钥Key:  

sudo openssl genrsa -des3 -out demo.key 1024
    # openssl genrsa 命令是会用来生成RSA私有秘钥,不会生成公钥,因为公钥提取自私钥
   # -des3  指定加密私钥文件用的算法,可以不用指定加密算法(自己测试用的话推荐不指定加密算法),可选:-des|-des3|-idea
   # -out demo.key  将生成的私钥保存至指定文件
   # 1024  指定要生成的私钥的长度(单位 bit),默认为1024,一般要么就是1024或者2048

  生成过程中会让输入密码,这里我测试使用的,直接输入了:123456

  注:上面生成的demo.key中使用了-des3加密算法参数,所以在部署使用后,如果需要重启,可能会要求输入密码确认,比如nginx -s reload时,这样在自己测试使用时就很麻烦了

  解决办法有两个:

  a.生成密码后再删除密码

  比如上面生成了一个demo.key的私钥文件,执行下面的命令可以重置: 

sudo openssl rsa -in demo.key -out temp.key && sudo rm demo.key && sudo mv temp.key demo.key

  b.在生成私钥是不要指定-des3参数

  比如上面的生成demo.key的命令换成:  

sudo openssl genrsa -out demo.key 1024

 

2、生成证书请求文件

  执行下面的命令生成证书请求文件:

sudo openssl req -new -key demo.key -out demo.csr
    # openssl req 命令主要的功能有,生成证书请求文件, 查看验证证书请求文件,还有就是生成自签名证书
   # -new 说明生成证书请求文件
   # -key demo.key 指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合。
   # -out demo.csr 指定生成的证书请求或者自签名证书名称

  命令执行后会让输入一些证书信息,具体可参考下图:

制作能在nginx和IIS中使用的ssl证书

 

3、生成crt证书文件

  执行下面的命令生成证书文件:  

sudo openssl x509 -req -days 36500 -in demo.csr -signkey demo.key -out demo.crt
    # openssl x509 命令主要用于输出证书信息,签署证书请求文件、生成自签名证书、转换证书格式等
   # -req 表明后面输入的是一个证书请求文件
   # -days 36500 证书的有效期,单位是天(一百年后我们再见吧)
   # -in demo.csr 指定输入文件
   # -signkey demo.key 签名证书秘钥
   # -out demo.crt 指定证书的输出文件

  如果提示类似如下,说明生成成功了:

制作能在nginx和IIS中使用的ssl证书

 

4、生成pfx证书安装包

  执行下面命令生成安装包文件: 

sudo openssl pkcs12 -export -inkey demo.key -in demo.crt -out demo.pfx
    # openssl pkcs12 命令用于生成和分析pkcs12文件
   # -export 指定了一个PKCS#12文件将会被创建
   # -inkey demo.key 指定私钥文件的位置。如果没有被指定,私钥必须在-in filename中指定
   # -in demo.crt 指定私钥和证书读取的文件
   # -out demo.pfx 指定输出的pkcs12文件

  执行命令后会输入密码,这里我输入同样是:123456  

  至此,证书就制作完成了,我们得到4个文件: 

制作能在nginx和IIS中使用的ssl证书

demo.crt:crt证书文件,nginx配置时可以用到
    demo.csr:crt证书请求文件,现在基本上没什么用了
    demo.key:私钥,nginx配置时可以用到
    demo.pfx:证书安装包,iis部署时可以用到

 

Nginx配置使用证书

  创建一个nginx配置配置文件:  

  server {
        listen 4430 ssl;
        listen [::]:4430 ssl;

        ssl on;
        ssl_certificate /home/feng/ssl/demo.crt;  #crt证书文件
        ssl_certificate_key /home/feng/ssl/demo.key;  #私钥文件
        ssl_session_timeout 5m;
        ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
  }

  注意,这里我为了区分,没有使用默认的443端口,而是使用了4430端口

  接着使用 nginx -t 验证和使用 nginx -s reload 重新加载后,使用浏览器访问4430可访问到了,只不过会提示存在风险,毕竟证书是自己制作的,如下图:

制作能在nginx和IIS中使用的ssl证书

  点击高级=》接受风险就可以了

 

IIS配置使用证书   

  IIS配置证书需要pfx证书安装包(demo.pfx),这里以IIS7为例:

  打开IIS,在主页中点击【服务器证书】

制作能在nginx和IIS中使用的ssl证书

   点击右边操作的【导入】,选择创建好的pfx证书文件,输入创建文件时输入的密码(上面第4步创建pfx文件时输入的密码,这里是123456):

制作能在nginx和IIS中使用的ssl证书

  接着选择你要设置添加https请求类型的网站,在右边操作中点击【绑定】,然后按照下图操作:

制作能在nginx和IIS中使用的ssl证书

  然后重启一下站点,在指定的端口使用https请求了

  注:如果你的电脑安装了VMware等工具,443端口可能启动报错,可能提示:另一个程序正在使用此文件,进程无法访问。解决办法参考:https://www.3water.com/article/109375.htm

 

程序中使用证书

  有时,我们还可能需要在程序中使用证书,比如在使用Grpc,我们默认是使用https的,或者我们只是想使用https请求,那么我们可能需要在程序中使用证书来操作,比如.net core中使用自制证书来生成https请求的项目:

  我们创建一个.net core的web项目,使用上面创建的demo.pfx,修改Program.cs:  

public class Program
    {

        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureKestrel(options =>
                    {
                        options.ListenAnyIP(5000, listenOptions =>
                        {
                            listenOptions.UseHttps(@"C:\inetpub\wwwroot\demo.pfx", "123456");
                        });
                    });
                    webBuilder.UseStartup<Startup>();
                });
    }

  启动之后就可以使用https请求访问了

以上就是制作能在nginx和IIS中使用的ssl证书的详细内容,更多关于制作ssl证书的资料请关注三水点靠木其它相关文章!

Servers 相关文章推荐
关于nginx 实现jira反向代理的问题
Sep 25 Servers
图文详解nginx日志切割的实现
Jan 18 Servers
使用 Apache Dubbo 实现远程通信(微服务架构)
Feb 12 Servers
Apache Hudi集成Spark SQL操作hide表
Mar 31 Servers
Kubernetes关键组件与结构组成介绍
Mar 31 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
Nginx开源可视化配置工具NginxConfig使用教程
Jun 21 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
VMware虚拟机安装 Windows Server 2022的详细图文教程
Sep 23 Servers
ubuntu20.04虚拟机无法上网的问题及解决
Dec 24 Servers
Valheim服务器 Mod修改安装教程 【ValheimPlus】
Dec 24 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Linux中Nginx的防盗链和优化的实现代码
详解nginx进程锁的实现
Jun 14 #Servers
Nginx四层负载均衡的配置指南
配置nginx 重定向到系统维护页面
Jun 08 #Servers
nginx配置文件使用环境变量的操作方法
Jun 02 #Servers
nginx+lua单机上万并发的实现
May 31 #Servers
You might like
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
Python文件去除注释的方法
2015/05/25 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
Python文件读写常见用法总结
2019/02/22 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
delegate与普通函数的区别
2014/01/22 面试题
幼儿园中班教师寄语
2014/04/03 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
社区低保工作总结2015
2015/07/23 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
使用feign服务调用添加Header参数
2021/06/23 Java/Android
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS