自签生成SSL证书IIS和nginx全流程

一、IIS自签名证书生成与配置(Windows环境)

(一)生成自签名证书

1. 打开IIS管理器

  • 在服务器上,点击“开始”菜单,选择“管理工具”,然后点击“Internet Information Services (IIS) 管理器”。
  • 或者直接在运行窗口(快捷键Win+R)中输入inetmgr,然后按回车键。

2. 创建自签名证书

  • 在IIS管理器中,确保你选择了服务器节点(即服务器名称),而不是某个具体的网站。
  • 在右侧的“功能视图”中,找到“服务器证书”功能,双击它。
  • 在“服务器证书”页面中,你会看到一个操作面板。点击右侧的“创建自签名证书”按钮。
  • 在弹出的“创建自签名证书”对话框中,输入一个友好的名称,例如“LocalTestCert”或“MySelfSignedCert”。这个名称只是为了方便你识别这个证书,不会显示给用户。
  • 点击“确定”按钮。IIS会自动创建一个自签名证书,并将其添加到服务器证书列表中。

(二)将证书绑定到网站

1. 选择需要绑定证书的网站

  • 在IIS管理器中,展开服务器节点,找到并选择你想要启用HTTPS的网站。

2. 添加HTTPS绑定

  • 在右侧的“操作”面板中,点击“绑定”按钮。
  • 在弹出的“网站绑定”对话框中,你会看到当前网站的所有绑定信息。
  • 点击“添加”按钮,以添加一个新的绑定。
  • 在“添加网站绑定”对话框中:
    • 类型:选择https。
    • IP地址:通常选择所有未分配,这样无论客户端通过哪个IP地址访问,都能使用该证书。如果你的服务器有多个IP地址,并且你只想在某个特定IP上启用HTTPS,可以选择对应的IP地址。
    • 端口:输入443。这是HTTPS服务的默认端口号。如果你有特殊需求,也可以使用其他端口号,但客户端访问时需要明确指定端口号。
    • SSL证书:在下拉列表中,找到并选择你刚刚创建的自签名证书(例如“LocalTestCert”)。
  • 点击“确定”按钮完成绑定。

3. 验证配置

  • 在IIS管理器中,选中你刚刚配置的网站,然后点击右侧的“启动”按钮,确保网站能够正常运行。
  • 打开浏览器,访问https://<你的服务器IP或域名>。由于这是一个自签名证书,浏览器会弹出安全警告,提示证书不受信任。你可以点击“高级”选项,然后选择“继续前往<你的服务器IP或域名>(不安全)”,以查看网站是否能够通过HTTPS正常访问。

二、Nginx自签名证书生成与配置(Linux环境)

(一)生成自签名证书

1. 安装OpenSSL

  • 打开终端。
  • 在大多数Linux发行版中,OpenSSL通常已经预装。如果没有安装,可以通过包管理器安装。例如
    • 在基于Debian的系统(如Ubuntu)中:

       

      sudo apt update
      sudo apt install openssl
    • 在基于Red Hat的系统(如CentOS)中:
      • sudo yum install openssl

2. 创建证书存储目录

  • 为了方便管理,建议创建一个专门的目录来存放证书和私钥文件。例如:
    • sudo mkdir -p /usr/local/nginx/ssl
      cd /usr/local/nginx/ssl

3. 生成私钥

  • 在终端中,运行以下命令生成一个2048位的RSA私钥文件:sudo openssl genrsa -out server.key 2048
    •   server.key是私钥文件的名称,你可以根据需要修改文件名。
    •   2048表示密钥长度为2048位,这是目前推荐的安全长度。你也可以选择更高(如3072位或4096位),但会增加计算开销。

4. 生成自签名证书

  • 生成自签名证书时,需要填写一些信息,这些信息将嵌入到证书中。运行以下命令:
    • sudo openssl req -new -x509 -days 365 -key server.key -out server.crt
      • -new:表示生成一个新的证书签名请求(CSR)。
      • -x509:表示直接生成自签名证书,而不是生成CSR等待CA签名。
      • -days 365:表示证书的有效期为365天。你可以根据需要调整有效期,例如-days 730表示有效期为2年。
      • -key server.key:指定私钥文件。
      • -out server.crt:指定生成的证书文件名称。
  • 在执行上述命令时,系统会提示你输入一些信息:
    • Country Name (2 letter code):国家代码,例如CN(中国)、US(美国)。
    • State or Province Name:省份或州的名称,例如Beijing。
    • Locality Name:城市名称,例如Beijing。
    • Organization Name:组织名称,例如My Company。
    • Organizational Unit Name:部门名称,例如IT Department。
    • Common Name (e.g. server FQDN or YOUR name):这是最重要的字段,通常填写你的域名或服务器IP地址。例如example.com或192.168.1.100。
    • Email Address:电子邮件地址,可选。

(二)配置Nginx使用自签名证书

1. 编辑Nginx配置文件

  • 打开Nginx的配置文件。默认情况下,配置文件位于/etc/nginx/nginx.conf,或者在/etc/nginx/sites-available/目录下有单独的配置文件。
  • 如果你使用的是默认配置文件,可以直接编辑nginx.conf。如果使用的是虚拟主机配置文件,找到对应的文件进行编辑。例如:

    • sudo vim /etc/nginx/sites-available/default
    • sudo vim /usr/local/nginx/conf/nginx.conf

2. 添加HTTPS配置

  • 在配置文件中,找到或创建一个server块,用于配置HTTPS服务。例如:
    • server {
          listen 443 ssl;  # 监听443端口,并启用SSL
          server_name your_domain_or_ip;  # 替换为你的域名或IP地址
      
          ssl_certificate /etc/nginx/ssl/server.crt;  # 指定证书文件路径
          ssl_certificate_key /etc/nginx/ssl/server.key;  # 指定私钥文件路径
      
          # 配置网站的根目录
          root /var/www/html;
      
          # 配置默认页面
          index index.html index.htm;
      
          # 其他配置(如伪静态规则等)...
      }
  • listen 443 ssl;:表示监听443端口,并启用SSL。
  • server_name:填写你的域名或IP地址。如果需要支持多个域名,可以用空格分隔,例如server_name example.com www.example.com。
  • ssl_certificate:指定证书文件的路径。
  • ssl_certificate_key:指定私钥文件的路径。
  • root和index:根据你的网站实际情况配置网站的根目录和默认页面。

3. 测试配置文件

  • 在终端nginx安装目录中运行以下命令,检查Nginx配置文件是否有语法错误:sudo ./sbin/nginx -t conf/nginx.conf
    • 如果配置文件没有问题,你会看到类似以下的输出:
    • nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
      nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    • 如果有错误,根据提示信息修复配置文件中的错误。

4. 重启Nginx服务

  • 如果配置文件测试通过,运行命令重启Nginx服务,使配置生效:sudo systemctl restart nginx / ./sbin/nginx -s reload

(三)验证HTTPS访问

  • 打开浏览器,访问https://<your_domain_or_ip>。
  • 由于这是一个自签名证书,浏览器会弹出安全警告,提示证书不受信任。你可以点击“高级”选项,然后选择“继续前往<your_domain_or_ip>(不安全)”,以查看网站是否能够通过HTTPS正常访问。
  • 如果一切正常,你应该能够看到你的网站内容,并且地址栏显示为https。

三、常见问题及解决方法

(一)证书不受信任问题

问题描述:
无论是IIS还是Nginx,使用自签名证书时,浏览器都会提示证书不受信任,用户需要手动接受证书才能访问网站。

解决方法:
虽然自签名证书在生产环境中不推荐使用,但在本地开发或测试环境中,可以通过以下方法解决证书不受信任的问题。

  1. 将自签名证书添加到受信任的根证书颁发机构:
    Windows(IIS环境):
    1. 打开“运行”窗口(快捷键Win+R),输入certmgr.msc,然后按回车键。
    2. 在“证书管理器”中,展开“受信任的根证书颁发机构”。
    3. 右键点击“证书”,选择“所有任务” -> “导入”。
    4. 导航到IIS生成的自签名证书文件(通常是.cer格式),选择该证书并完成导入。
    5. 重新打开浏览器,访问HTTPS网站时,浏览器应该不会再提示证书不受信任。
  2. Linux(Nginx环境):
    1. 将生成的自签名证书文件(server.crt)复制到客户端机器上。
    2. 在客户端机器上,将证书文件添加到受信任的证书存储中。例如,在Ubuntu系统中,可以使用以下命令:
      1. sudo cp server.crt /usr/local/share/ca-certificates/
        sudo update-ca-certificates
    3. 重新打开浏览器,访问HTTPS网站时,浏览器应该不会再提示证书不受信任。

版权声明:本文为CSDN博主「龙仔725」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44858074/article/details/147410124

四、Tomcat自签名证书

1、生成自签名证书

可以使用Java自带的keytool工具来生成。打开命令行工具,并执行以下命令:

keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365
  • -genkey 指示keytool生成一个新的密钥对。
  • -alias 是密钥对的别名,这里用tomcat
  • -keyalg 指定密钥算法,这里使用RSA
  • -keysize 指定密钥长度,这里使用2048位。
  • -keystore 指定密钥库的名称和位置,这里创建了一个名为keystore.jks的文件。
  • -validity 指定证书的有效期,单位是天,这里设置为365天。

执行此命令后,系统会提示你输入密钥库的密码(例如:changeit),以及一些关于你的组织信息(如:组织名、组织单位等)。这些信息可以根据你的需求填写

2、配置tomcat使用自签名证书

生成完密钥库和证书后,你需要将这个密钥库配置到Tomcat中。这通常通过修改Tomcat的配置文件来实现。

对于Tomcat 8及更高版本:

  1. 打开Tomcat的配置文件server.xml,通常位于<Tomcat安装目录>/conf/目录下。

  2. <Connector>标签中配置SSL,如下所示:

    1. <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                 clientAuth="false" sslProtocol="TLS"
                 keystoreFile="conf/keystore.jks" keystorePass="changeit"/>
      • port 是HTTPS端口,默认是8443。
      • keystoreFile 是你的密钥库文件路径,这里是相对路径,根据你的实际情况可能需要调整为绝对路径。
      • keystorePass 是密钥库的密码。
  3.  验证配置

    1. 重新启动Tomcat后,你可以通过浏览器访问https://localhost:8443(或者你的服务器地址和端口)来测试HTTPS是否配置成功。你应该会看到一个由你的自签名证书签发的安全连接警告,因为这是一个自签名证书,浏览器会提示证书不是可信的。你可以选择继续访问网站来忽略这个警告

 

posted @ 2025-12-12 10:26  阿尔法哲  阅读(51)  评论(0)    收藏  举报