服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - 制作能在nginx和IIS中使用的ssl证书

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

2021-08-16 17:49没有星星的夏季 Nginx

现在的后端开发,动不动就是需要https,或者说是需要ssl证书,既然没有正版的证书,那么我们只能自己制作ssl的证书了。 证书的制作采用的是openssl工具,如果没有,可以自行安装下,因为笔者是在linux(ubuntu)下制作,所以一般

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

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

制作ssl证书

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

1、生成私钥key

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

?
1
2
3
4
5
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的私钥文件,执行下面的命令可以重置: 

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

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

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

?
1
sudo openssl genrsa -out demo.key 1024

2、生成证书请求文件

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

?
1
2
3
4
5
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证书文件

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

?
1
2
3
4
5
6
7
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证书安装包

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

?
1
2
3
4
5
6
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证书

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

nginx配置使用证书

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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端口可能启动报错,可能提示:另一个程序正在使用此文件,进程无法访问。解决办法参考:

程序中使用证书

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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证书的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/shanfeng1000/p/14218022.html

延伸 · 阅读

精彩推荐