好的,以下是基于麒麟 Linux 系统生成自签证书,并将其转换为适用于 IIS 的 .pfx 文件以及 .pem 文件的详细步骤:
一、在麒麟 Linux 上安装 OpenSSL
1. 检查系统自带的 OpenSSL 版本
运行以下命令检查系统是否已安装 OpenSSL 及其版本:
openssl version
如果系统已安装 OpenSSL,但版本较旧,或者需要更高版本的 OpenSSL,可以手动安装。
2. 安装 OpenSSL
根据搜索结果,以下是适用于麒麟 Linux 的 OpenSSL 安装方法:
方法一:直接安装系统自带的 OpenSSL(如果系统自带版本满足需求)
sudo yum install openssl
方法二:从源码编译安装最新版本的 OpenSSL(如果需要更高版本)
下载 OpenSSL 源码
- 从 OpenSSL 官方网站下载源码包,例如 OpenSSL 3.0.10:wget https://www.openssl.org/source/openssl-3.0.10.tar.gz
解压源码包
tar -zxvf openssl-3.0.10.tar.gz
cd openssl-3.0.10
配置安装路径
./config –prefix=/usr/local/openssl –openssldir=/usr/local/openssl shared zlib
编译并安装
make -j4
sudo make install
清理旧版本文件
sudo rm -rf /usr/bin/openssl
sudo rm -rf /usr/include/openssl
sudo rm -rf /usr/lib64/libssl.so
sudo rm -rf /usr/lib64/libcrypto.so
sudo rm -rf /usr/lib/libssl.so
sudo rm -rf /usr/lib/libcrypto.so
建立软链接
sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/openssl/lib/libssl.so /usr/lib/libssl.so
sudo ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
sudo ln -s /usr/local/openssl/lib/libcrypto.so /usr/lib/libcrypto.so
sudo ln -s /usr/local/openssl/lib/libcrypto.so /usr/lib64/libcrypto.so
sudo ln -s /usr/local/openssl/lib/libssl.so.3 /usr/lib/libssl.so.3
sudo ln -s /usr/local/openssl/lib/libssl.so.3 /usr/lib64/libssl.so.3
sudo ln -s /usr/local/openssl/lib/libcrypto.so.3 /usr/lib64/libcrypto.so.3
sudo ln -s /usr/local/openssl/lib/libcrypto.so.3 /usr/lib/libcrypto.so.3
验证安装
openssl version
如果显示安装的版本号(如 OpenSSL 3.0.10),则说明安装成功。
二、生成自签证书
1. 创建证书存储目录
sudo mkdir -p /etc/ssl/mycerts
cd /etc/ssl/mycerts
2. 生成私钥
运行以下命令生成一个 2048 位的 RSA 私钥文件:
sudo openssl genrsa -out server.key 2048
- server.key 是私钥文件的名称。
- 2048 表示密钥长度为 2048 位,这是目前推荐的安全长度。
3. 生成自签名证书
运行以下命令生成自签名证书:
sudo openssl req -new -x509 -days 365 -key server.key -out server.crt
- -new:表示生成一个新的证书签名请求(CSR)。
- -x509:表示直接生成自签名证书。
- -days 365:表示证书的有效期为 365 天。
- -key server.key:指定私钥文件。
- -out server.crt:指定生成的证书文件名称。
在执行上述命令时,系统会提示输入一些信息,例如:
- Country Name (2 letter code):国家代码(两位字母),例如 CN。
- State or Province Name:省份或州,例如 Beijing。
- Locality Name:城市,例如 Beijing。
- Organization Name:组织名称,例如 MyCompany。
- Organizational Unit Name:部门名称,例如 IT。
- Common Name:域名或 IP 地址,例如 example.com。
- Email Address:电子邮件地址,例如 admin@example.com。
4. 合并证书和私钥为 .pem 文件
将证书和私钥合并为一个 .pem 文件:
cat server.crt server.key > server.pem
- server.pem 文件中将包含证书和私钥的内容,适用于需要 PEM 格式的场景。
三、将证书转换为 .pfx 格式(适用于 IIS)
1. 生成 .pfx 文件
运行以下命令将 PEM 格式的证书和私钥转换为 .pfx 文件:
openssl pkcs12 -export -out server.pfx -in server.crt -inkey server.key
- -export:表示导出为 PKCS#12 格式。
- -out server.pfx:指定输出的 .pfx 文件名称。
- -in server.crt:指定证书文件。
- -inkey server.key:指定私钥文件。
在执行此命令时,系统会提示输入一个导出密码,用于保护 .pfx 文件。请记住这个密码,后续在 IIS 中导入证书时会用到。
2. 将 .pfx 文件传输到 Windows 服务器
将生成的 server.pfx 文件从麒麟 Linux 服务器传输到运行 IIS 的 Windows 服务器上。可以使用文件传输工具(如 WinSCP)或通过网络共享等方式完成传输。
四、在 IIS 中导入 .pfx 证书
1. 打开 IIS 管理器
在 Windows 服务器上,打开 IIS 管理器:
- 在“开始”菜单中搜索“Internet Information Services (IIS) Manager”并打开。
2. 导入证书
- 浏览并选择之前传输过来的 server.pfx 文件。
- 输入之前设置的导出密码。
- 点击“确定”完成证书导入。
3. 将证书绑定到网站
- 类型:选择 https。
- IP地址:通常选择 所有未分配。
- 端口:输入 443。
- SSL证书:在下拉列表中,选择刚刚导入的证书。
4. 验证配置
启动 IIS 网站,确保网站能够正常运行。
- 打开浏览器,访问 https://<你的服务器IP或域名>。由于是自签名证书,浏览器会弹出安全警告,提示证书不受信任。可以点击“高级”选项,然后选择“继续前往<你的服务器IP或域名>(不安全)”,以查看网站是否能够通过 HTTPS 正常访问。
五、注意事项
1. 证书信任问题
- 自签名证书不会被浏览器默认信任,因此在浏览器中访问时会显示安全警告。如果需要在生产环境中使用,建议购买由受信任的证书颁发机构(CA)签发的证书。
- 如果仅用于测试或内网环境,可以通过将自签名证书的根证书导入到客户端设备的受信任证书存储中,来解决信任问题。
2. 证书有效期
- 在生成自签名证书时,可以通过 -days 参数设置证书的有效期。例如,-days 730 表示证书有效期为 2 年。
3. 安全设置
在 IIS 中,可以通过注册表编辑器启用更安全的加密协议(如 TLS 1.2 或 TLS 1.3),并禁用弱加密套件。以下是详细步骤:
(1)启用 TLS 1.2 和 TLS 1.3,禁用 TLS 1.0 和 TLS 1.1
(可参考我另一篇文章) 如何使用iiscrypto
步骤 1:打开注册表编辑器
步骤 2:导航到注册表路径
在注册表编辑器中,导航到以下路径:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols
步骤 3:创建或修改协议子项
在 Protocols 下,需要为每个协议(TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3)创建或修改子项。
(a)禁用 TLS 1.0 和 TLS 1.1
对于 TLS 1.0 和 TLS 1.1,我们需要禁用它们,因为这些协议被认为不够安全。
找到或创建 TLS 1.0 和 TLS 1.1 子项
- 如果 TLS 1.0 或 TLS 1.1 子项不存在,请右键点击 Protocols,选择“新建” -> “项”,并命名为 TLS 1.0 或 TLS 1.1。
- 在每个协议下,创建两个子项:
- Client
- Server
设置禁用值
- 在 Client 和 Server 子项下,分别创建以下两个 DWORD 值:
- DisabledByDefault:设置为 1(表示禁用)。
- Enabled:设置为 0(表示禁用)。
具体操作如下:
- 右键点击 Client 或 Server,选择“新建” -> “DWORD (32-bit) 值”。
- 输入 DisabledByDefault,双击它,将其值设置为 1。
- 同样,创建 Enabled,并将其值设置为 0。
(b)启用 TLS 1.2 和 TLS 1.3
对于 TLS 1.2 和 TLS 1.3,我们需要启用它们以确保使用更安全的加密协议。
找到或创建 TLS 1.2 和 TLS 1.3 子项
- 如果 TLS 1.2 或 TLS 1.3 子项不存在,请右键点击 Protocols,选择“新建” -> “项”,并命名为 TLS 1.2 或 TLS 1.3。
- 在每个协议下,创建两个子项:
- Client
- Server
设置启用值
- 在 Client 和 Server 子项下,分别创建以下两个 DWORD 值:
- DisabledByDefault:设置为 0(表示启用)。
- Enabled:设置为 1(表示启用)。
具体操作如下:
- 右键点击 Client 或 Server,选择“新建” -> “DWORD (32-bit) 值”。
- 输入 DisabledByDefault,双击它,将其值设置为 0。
- 同样,创建 Enabled,并将其值设置为 1。
(2)重启服务器
完成注册表修改后,需要重启服务器以使更改生效:
(3)验证配置
重启服务器后,可以通过以下方法验证 TLS 配置是否生效:
使用 SSL Labs 测试
使用 PowerShell 测试
你也可以使用 PowerShell 脚本来测试服务器支持的 TLS 版本:
$port = 443
$server = "your_server_ip_or_domain"
$tcpClient = New-Object System.Net.Sockets.TcpClient
$tcpClient.Connect($server, $port)
$sslStream = New-Object System.Net.Security.SslStream($tcpClient.GetStream(), $false, {$true})
$sslProtocols = [System.Security.Authentication.SslProtocols]::Tls12, [System.Security.Authentication.SslProtocols]::Tls13
$sslStream.AuthenticateAsClient($server, $null, $sslProtocols, $false)
if ($sslStream.CipherStrength -gt 0) {
Write-Host "TLS 1.2 and TLS 1.3 are enabled."
} else {
Write-Host "TLS 1.2 and TLS 1.3 are not enabled."
}
$sslStream.Close()
$tcpClient.Close()
(4)禁用不安全的加密套件
除了启用安全的 TLS 版本外,还应禁用不安全的加密套件。可以通过以下步骤完成:
打开注册表编辑器:
- 按下 Win + R 键,输入 regedit,然后按 Enter 键。
导航到以下路径:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Ciphers
禁用不安全的加密套件:
-
在 Ciphers 下,找到或创建以下子项:
- DES 56/56
- RC2 40/128
- RC2 56/128
- RC4 40/128
- RC4 56/128
- RC4 64/128
- Triple DES 168
-
对于每个子项,创建一个 DWORD 值:
- Enabled:设置为 0(表示禁用)。
(5)启用更安全的加密套件
除了禁用不安全的加密套件外,还可以通过 IIS 配置文件启用更安全的加密套件。例如,启用 AES 加密套件。
打开 IIS 配置文件:
- 打开文件资源管理器,导航到以下路径:C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config
编辑配置文件:
- 打开 applicationHost.config 文件,找到 <system.webServer> 部分。
- 添加或修改以下配置:<system.webServer>
<security>
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
<applicationDependencies>
<add name="TLS 1.2" />
<add name="TLS 1.3" />
</applicationDependencies>
</security>
</system.webServer>
保存并重启 IIS:
- 保存配置文件后,重启 IIS 以使更改生效:iisreset
(6)验证加密套件
完成配置后,可以通过以下方法验证加密套件是否生效:
使用 SSL Labs 测试
使用 OpenSSL 测试
你也可以使用 OpenSSL 命令行工具测试服务器支持的加密套件:
openssl s_client -connect your_server_ip_or_domain:443 -tls1_2
如果连接成功并显示支持的加密套件,则说明配置生效。
总结
通过以上步骤,你可以在麒麟 Linux 系统上生成自签证书,并将其转换为适用于 IIS 的 .pfx 文件以及 .pem 文件。同时,通过在 IIS 中启用更安全的加密协议(如 TLS 1.2 或 TLS 1.3),并禁用不安全的协议(如 TLS 1.0 和 TLS 1.1),可以显著提升服务器的安全性。以下是整个流程的关键点回顾:
1. 在麒麟 Linux 上生成自签证书
- 安装 OpenSSL:确保系统中安装了最新版本的 OpenSSL。
- 生成私钥:使用 openssl genrsa 命令生成私钥文件。
- 生成自签名证书:使用 openssl req 命令生成自签名证书。
- 合并证书和私钥:将证书和私钥合并为 .pem 文件,便于后续使用。
2. 将证书转换为 .pfx 格式
- 生成 .pfx 文件:使用 openssl pkcs12 命令将 PEM 格式的证书和私钥转换为 .pfx 文件。
- 传输 .pfx 文件:将 .pfx 文件从 Linux 服务器传输到 Windows 服务器。
3. 在 IIS 中导入证书
- 打开 IIS 管理器:通过 IIS 管理器导入 .pfx 文件。
- 绑定证书到网站:将证书绑定到需要使用 HTTPS 的网站。
- 验证配置:通过浏览器访问网站,确保 HTTPS 正常工作。
4. 启用更安全的加密协议
- 修改注册表:通过注册表编辑器启用 TLS 1.2 和 TLS 1.3,禁用 TLS 1.0 和 TLS 1.1。
- 重启服务器:重启服务器以使注册表更改生效。
- 验证配置:使用 SSL Labs 或 OpenSSL 工具验证服务器是否启用了安全的加密协议。
5. 禁用不安全的加密套件
- 修改注册表:禁用不安全的加密套件(如 RC4、DES 等)。
- 启用安全的加密套件:通过 IIS 配置文件启用更安全的加密套件(如 AES)。
- 验证加密套件:使用 SSL Labs 或 OpenSSL 工具验证服务器是否启用了安全的加密套件。
关键点回顾
常见问题及解决方法
证书导入失败:
- 确保 .pfx 文件的密码正确。
- 确保 .pfx 文件未损坏,可以通过 OpenSSL 命令验证:openssl pkcs12 -info -in server.pfx
注册表修改后无法启动 IIS:
- 确保注册表路径和值正确无误。
- 如果出现问题,可以通过恢复注册表备份来还原设置。
浏览器显示安全警告:
- 如果是自签名证书,可以通过将证书导入客户端设备的受信任证书存储来解决。
- 如果是生产环境,建议购买由受信任的证书颁发机构(CA)签发的证书。
无法启用 TLS 1.2 或 TLS 1.3:
- 确保服务器的操作系统支持这些协议。
- 确保注册表路径和值正确无误。
通过以上步骤和注意事项,你可以确保在麒麟 Linux 系统上生成的自签证书能够安全地应用于 IIS 服务器,并且服务器使用了最新的加密协议和加密套件。这不仅提高了服务器的安全性,也确保了用户数据的保密性和完整性。
如果你在实施过程中遇到任何问题,或者需要进一步的帮助,请随时告诉我!
评论前必须登录!
注册