2020年最后一篇博文收官,提前祝各位园友新年快乐

  现在的后端开发,动不动就是需要https,或者说是需要ssl证书,既然没有正版的证书,那么我们只能自己制作ssl的证书了。

  说明:证书的制作采用的是openssl工具,如果没有,可以自行安装下,因为笔者是在linux(ubuntu)下制作,所以一般是使用包管理工具(apt)安装好了的

  如果觉得证书制作比较麻烦,这里是本文制作好的证书: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 指定生成的证书请求或者自签名证书名称

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

  

  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 指定证书的输出文件

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

  

  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个文件:

     

    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可访问到了,只不过会提示存在风险,毕竟证书是自己制作的,如下图:

  

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

  IIS配置使用证书   

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

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

  

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

  

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

  

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

  注:如果你的电脑安装了VMware等工具,443端口可能启动报错,可能提示:另一个程序正在使用此文件,进程无法访问。解决办法参考:http://www.youxia.org/2018/01/36418.html

  

  程序中使用证书

  有时,我们还可能需要在程序中使用证书,比如在使用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请求访问了

简单的制作ssl证书,并在nginx和IIS中使用的更多相关文章

  1. Https系列之一:https的简单介绍及SSL证书的生成

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

  2. 在macOS平台下制作SSL证书,免费域名通配符证、单域名证书、多域名证书教程

    1.安装 home-brew 2.安装 certbot 在终端执行下面命令 brew install certbot 3.制作SSL证书 第一步: 在终端执行下面命令 sudo certbot cer ...

  3. openssl 自己制作ssl证书:自己签发免费ssl证书,为nginx生成自签名ssl证书

    server { listen 80; listen 443 ssl; server_name ~^((cloud)|(demo-cloud)|(demo2-cloud)|(approval1))(( ...

  4. 制作SSL证书

    上一节介绍了OpenSSL的目录结构,本节介绍一下SSL证书的制作. OpenSSL安装后建议把其中的bin目录添加到系统环境变量中,方便以后操作. 建立一个新的目录SSL专门用来制作证书. 建立证书 ...

  5. Godaddy ssl证书配置到nginx

    打开终端,输入以下命令 openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr 生成过程会询问几个常见问 ...

  6. 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求的两种方式

    一. 相关概念介绍 1. SSL证书服务 SSL证书服务由"服务商"联合多家国内外数字证书管理和颁发的权威机构.在xx云平台上直接提供的服务器数字证书.您可以在阿里云.腾讯云等平台 ...

  7. StartCom免费ssl证书申请以及在Tomcat环境中的配置

    提示:建议以下操作不使用谷歌浏览器(该网站的证书不识别...),可以看到我的截图中谷歌换成了ie(没装火狐)...建议该申请使用火狐 前面介绍了下自签名的ssl证书,虽然可以实现https协议访问,但 ...

  8. 自己制作ssl证书:自己签发免费ssl证书,为nginx生成自签名ssl证书

    这里说下Linux 系统怎么通过openssl命令生成 证书. 首先执行如下命令生成一个key openssl genrsa -des3 -out ssl.key 1024 然后他会要求你输入这个ke ...

  9. linux系统自签发免费ssl证书,为nginx生成自签名ssl证书

    首先执行如下命令生成一个key openssl genrsa -des3 -out ssl.key 1024 然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次rel ...

随机推荐

  1. [云原生]Docker - 容器

    目录 Docker容器 启动容器 新建并启动 启动已终止容器 守护态运行容器 终止容器 进入容器 attach命令 exec命令 导出和导入容器 导出容器 导入容器 删除容器 Docker容器 容器是 ...

  2. 关于Mysql java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的问题

    问题所在: 1.连接数据库一个是密码是否正确, 2.driver是否对, 3.有么有jar包冲突,

  3. Offset函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

  4. 【Azure Redis 缓存】Azure Cache for Redis 中如何快速查看慢指令情况(Slowlogs)

    问题描述 当 Azure Redis 服务器负载过高的情况下,使用时就会遇见连接超时,命令超时,IO Socket超时等异常.为了能定位是那些因素引起的,可以参考微软官方文档( 管理 Azure Ca ...

  5. Django中的常用字段类型与参数

    Django中的常用字段类型 1. 数值型 以下都是数值相关的,比如AutoField,它在MySQL中的类型为int(11),而BooleanField在MySQL中对应的类型是tinyint(1) ...

  6. CF415A Mashmokh and Lights 题解

    Content 有 \(n\) 个灯,一开始都是亮着的. 有 \(m\) 次操作,每次操作按下开关 \(x\),按下之后所有编号 \(\geqslant x\) 的灯全部熄灭.问你所有的灯第一次被熄灭 ...

  7. CF1265B Beautiful Numbers 题解

    Content 给定一个 \(1\sim n\) 的排列,请求出对于 \(1\leqslant m\leqslant n\),是否存在一个区间满足这个区间是一个 \(1\sim m\) 的排列. 数据 ...

  8. java数据类型:集合存储元素类型限制<泛型> ;自定义类指定泛型<T> 以及限制用法;派生子类泛型<T> super(泛型内参数); 泛型通配符?以及?限制用法

    问题背景 Java 集合有个缺点,把一个对象"丢进"集合里之后,集合就会"忘记"这个对象的数据类型,当再次取出该对象时 该对象的编译类型就变Object类型(其 ...

  9. centos使用shell脚本定时备份docker中的mysql数据库

    shell脚本 #!/bin/bash #容器ID container_id="6b1faea2b4d7" #登录用户名 mysql_user="root" # ...

  10. JAVA直接连接Redis

    引入maven <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</ ...