当前位置: 首页 > 淘宝 > 正文

用opensll创建自签名 S/MIME 证书,并配置outlook和IOS邮件客户端。




更新(2022 年 4 月):我使用Win32/Win64 OpenSSL Installer for Windows – Shining Light Productions中的 Win64 OpenSSL v3.0.2在 Windows 10 64 位机器上测试了这些步骤。没有出现问题,且可以正常使用

公钥加密的(非常)简要入门

准备好困惑!

由于证书基于公钥加密,请记住,您需要拥有预期电子邮件收件人的公钥才能加密电子邮件。相反,如果有人想向您发送加密的电子邮件,则该人需要您的公钥。例如,如果我想向 Bob 发送一封电子邮件,我将需要 Bob 的公钥来加密电子邮件。当 Bob 收到加密的电子邮件时,Bob 的电子邮件客户端使用他的个人私钥来解密电子邮件。如果 Bob 想给我发一封电子邮件,他需要我的公钥来加密这封电子邮件。这篇文章逐步介绍了如何创建您自己的个人公钥/私钥对。公钥是电子邮件发件人加密发送给您的电子邮件所需要的。您的私钥仅由您保存,因为它用于解密使用您的公钥加密的任何电子邮件。

有没有更简单的方法?

是的。您可以从Comodo等多家公司免费获得基本证书。但是现在这些免费已经取消了,所以我们决定自签证书.

这其中的乐趣在哪里?通过创建自己的证书,您无需依赖外部方,并且可以在此过程中学到更多东西。

所以下面就开始让我们自签S/MIME证书开始吧。

第 1 步 – 安装 OpenSSL

我们将使用 OpenSSL 创建一个证书颁发机构,然后对我们创建的证书进行签名。最新的 OpenSSL 工具包位于OpenSSL站点。如果需要二进制分发,例如 Microsoft Windows 的预编译安装文件,可以在OpenSSL 二进制页面上找到这些文件。

找到适合您的操作系统的发行版后,请继续按照该发行版提供的安装说明进行操作。我自己安装的是:

Win32/Win64 OpenSSL Installer for Windows – Shining Light Productions中的Win64 OpenSSL v3.0.2 在 Windows 10 64 位。

我使用的是 Windows 发行版,因此这篇文章的某些部分可能特定于该操作系统。

另请注意,我已将 OpenSSL 安装在c:\openssl\目录中。

第 2 步 – 创建 OpenSSL 配置文件

注意:根据所使用的 OpenSSL 发行版,此步骤可能不是必需的。在 OpenSSL 的某些发行版中,基本配置文件已经包含下面引用的所需扩展。在其他发行版中,根本不提供基本配置文件。如果默认配置文件具有以下扩展名,并且您将它们复制到您自己的自定义配置文件中,则在第 4 步和第 7 步中将引发错误。对于我使用的分发版(上面引用),有一个默认配置文件包含适当的 [req]、[req_distinguished_name] 和 [v3_ca] 部分。

注意:对于我使用的发行版(上面引用),有一个默认配置文件包含适当的 [req]、[req_distinguished_name] 和 [v3_ca] 部分,因此我不需要在我的 smime.cnf 中的这些部分。但是,我确实使用 smime.cnf,特别是 [smime] 部分在步骤 7 中设置适当的扩展名。如果您使用相同的发行版,则可以在 c:\Program Files\Common Files 找到默认配置文件\SSL\openssl.cnf。

现在安装了 OpenSSL,需要一个配置文件。如果此时在没有配置文件的情况下执行 openssl.exe,则可能会收到消息WARNING: can’t open config file: /usr/local/ssl/openssl.cnf 。

创建一个名为smime.cnf的新文件,其中包含以下配置。该文件的内容遵循 x509 证书扩展配置格式。有关格式和内容的更多信息,请查看x509 v3 配置页面。[ req][req_distinguished_name]部分通常是任何标准 OpenSSL 配置文件的一部分。某些发行版包含一个默认配置文件,其中包含这些部分的某些版本。我将它们专门包含在此配置文件中,因为我收到一条错误消息,指出无法在配置中找到“distinguished_name”,这解决了错误。

注意: [ v3_ca][smime]部分对于本练习很重要,因为它们为 S/MIME 证书颁发机构和个人证书设置了适当的扩展。

所以综上所述第一步:

创建配置文件:

C:\openss\smime.cnf    #在C盘的Openssl文件夹下创建smime.cnf文件,并复制一下配置并保存
[req]
distinguished_name = req_distinguished_name

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = AU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Some-State
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Internet Widgits Pty Ltd
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64

[v3_ca]
basicConstraints = critical, CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer

[smime]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = emailProtection
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer
subjectAltName = email:copy

接下来,我们需要设置OPENSSL_CONF环境变量来引用新的配置文件。设置此环境变量将消除前面提到的警告消息。这部分是特定于 Windows 的。回想一下,我在 c:\openssl\ 目录下安装了 OpenSSL,将配置文件命名为 smime.cnf,并将其保存在 c:\openssl\ 目录下。

所以第二步,我们找到openssl的安装目录,以管理员身份运行openssl,请打开命令提示符窗口并确保以管理员身份运行。

执行以下命令:

set OPENSSL_CONF=c:\openssl\smime.cnf

如果执行完无任何问题请直接看下面第3步骤,这些内容对你没有意义。

执行 openssl.exe 时(从c:\openssl\bin\目录),没有警告消息,并显示 OpenSSL> 提示。键入exit,您将返回到 c:\openssl\bin\> 提示符。

对于使用 Windows 的用户,如果您需要删除 OPENSSL_CONF 环境变量,请使用以下命令启动“环境变量”对话框来创建、编辑或删除用户或系统变量。

rundll32 sysdm.cpl,EditEnvironmentVariables

第 3 步 – 为证书颁发机构生成 RSA 私钥

注意:以下步骤和 OpenSSL 命令应从命令提示符(在 Windows 上)执行,而不是在 OpenSSL 交互模式下执行。

在这篇文章中,我们将创建一个新的证书颁发机构来签署个人证书。执行以下命令为新的证书颁发机构生成 RSA 私钥:

openssl genrsa -aes256 -out ca.key 4096

这些选项指定使用 aes256 加密密码并将结果输出到名为 ca.key 的文件,大小为 4096 位。请注意,对应的公钥是从这个私钥派生的。生成公钥不需要额外的步骤或命令。

将显示以下消息。按照提示为此密钥创建密码短语。记住此密码以用于后续步骤。

Generating RSA private key, 4096 bit long modulus (2 primes)
........................................................++++
...............................................++++
e is 65537 (0x010001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:

第 4 步 – 为证书颁发机构创建自签名证书

注意:如步骤 2 中所述,如果分发版已经有适当的配置文件,则步骤 2 中创建的 smime.cnf 文件是不必要的,并且应从命令中排除最后一个参数,即删除“-extensions v3_ca”。

执行以下命令为证书颁发机构生成新的自签名证书:

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -extensions v3_ca

-x509 选项输出自签名证书而不是证书请求。-days 3650 选项指定生成的证书的认证期限为 10 年(忽略闰年)。-key 选项指定要使用的私钥。我们将使用在步骤 3 中创建的私钥 (ca.key) 并将自签名证书输出到名为 ca.crt 的文件中。

按照显示的提示进行操作。您将需要使用第 3 步中的密码短语。我只需输入特点。根据提示,我在下面的括号中提供了示例条目。请更改这些值以满足您自己的特定需求。不要在条目中包含括号。

Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:[.]        #国家代码,一般两位数,我写CN
State or Province Name (full name) [Some-State]:[.]      #省份代码,例如:beijing
Locality Name (eg, city) []:[.]     #城市代码,例如:beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:[TEST COMPANY]       #公司名称,例如:google
Organizational Unit Name (eg, section) []:[.]         #部门名称,例如:AI
Common Name (e.g. server FQDN or YOUR name) []:[TEST COMPANY CERTIFICATE AUTHORITY]
Email Address []:[.]           #邮件地址,例如:[email protected]

证书颁发机构已创建。现在,我们将开始为特定的电子邮件地址创建个人证书。

第 5 步 – 为个人电子邮件证书生成 RSA 私钥

与第 3 步类似,我们需要创建一个新的私钥。此私钥用于您的个人证书,而不是证书颁发机构。同样,请注意相应的公钥是从这个私钥派生的。生成公钥不需要额外的步骤或命令。

执行以下命令:

openssl genrsa -aes256 -out smime_personal_user.key 4096

出现提示时,输入与证书颁发机构私钥中使用的密码不同的密码短语。

Generating RSA private key, 4096 bit long modulus (2 primes)
........++++
.................++++
e is 65537 (0x010001)
Enter pass phrase for smime_personal_user.key:
Verifying - Enter pass phrase for smime_personal_user.key:

第 6 步 – 创建证书签名请求

现在我们有了个人私钥,我们需要创建一个证书签名请求。此命令类似于第 4 步,我们为证书颁发机构创建了一个自签名证书。但是,在此步骤中,选项略有不同,因为我们正在创建证书签名请求而不是自签名证书。我们正在创建证书签名请求,因为我们将使用证书颁发机构对证书进行签名。

执行以下命令:

openssl req -new -key smime_personal_user.key -out smime_personal_user.csr

出现提示时,输入用于在步骤 5 中创建私钥的密码短语。同样,我只需输入特点。根据提示,我在下面的括号中提供了示例条目。该示例使用一个名为Test User的假人,其电子邮件地址为[email protected]。与往常一样,请更改值以满足您自己的特定需求。不要在条目中包含括号。

请注意,此步骤中使用的Common Name应该与步骤 4 中使用的不同。我也没有在最后两个条目中设置挑战密码或公司名称。

Enter pass phrase for smime_personal_user.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:[.]
State or Province Name (full name) [Some-State]:[.]
Locality Name (eg, city) []:[.]
Organization Name (eg, company) [Internet Widgits Pty Ltd]:[TEST COMPANY]
Organizational Unit Name (eg, section) []:[.]
Common Name (e.g. server FQDN or YOUR name) []:[Test User]
Email Address []:[[email protected]]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

第 7 步 – 使用证书颁发机构签署证书

注意:如步骤 2 中所述,如果分发版已经有正确的配置文件,则步骤 2 中创建的 smime.cnf 文件是不必要的,最后两个参数应从命令中排除,即删除“-extfile c:\ openssl\smime.cnf -extensions smime”。在删除最后两个参数之前,请确认上述配置文件中 [smime] 部分中列出的扩展名存在于默认配置中。

至此,我们终于创建了个人自签名证书。我们将使用我们在步骤 2 中创建的配置文件来设置必要的扩展,我们将使用证书颁发机构来签署新的个人证书。

执行以下命令:

openssl x509 -req -days 3650 -in smime_personal_user.csr -CA ca.crt -CAkey ca.key -set_serial 1 -out smime_personal_user.crt -addtrust emailProtection -addreject clientAuth -addreject serverAuth -trustout -extfile c:\openssl\smime.cnf -extensions smime

出现提示时,输入步骤 3 中证书颁发机构私钥的密码短语。

Signature ok
subject=O = TEST COMPANY, CN = Test User, emailAddress = [email protected]
Getting CA Private Key
Enter pass phrase for ca.key:

重复步骤 5 到 7 为其他电子邮件地址创建证书。在步骤 7 中,为每个附加证书增加 set_serial 参数(或分配一个新的唯一编号)。

第 8 步 – 将证书打包成 PKCS12 格式

在完成所有这些工作之后,我想您会想要使用新的自签名数字证书来发送电子邮件。许多电子邮件客户端需要以标准格式打包的证书。此步骤将必要的文件捆绑为 PKCS12 格式。

执行以下命令:

openssl pkcs12 -export -in smime_personal_user.crt -inkey smime_personal_user.key -out smime_personal_user.p12

出现提示时,输入与您在第 5 步中创建的个人私钥关联的密码短语。您还将创建另一个密码短语,用于将 P12 文件导入电子邮件客户端。

Enter pass phrase for smime_test_user.key:
Enter Export Password:
Verifying - Enter Export Password:

创建完成后,我们只需要把证书导入到客户端即可。

以雷鸟为例,我们找到端到端加密,点击S/MIME证书管理,然后选择导入,导入我们刚刚生成的PK12证书包。然后分别选择签名证书和密钥证书。目前雷鸟对S/MIME的公钥保存功能还没有完善,所以我们无法将对方的公钥保存到我们的通讯录当中,所以导致目前的配置,在雷鸟中我们只能读取加密的邮件,而没法发送加密的邮件,因为我们找不到收件人的公钥。

所以下面我们以outlook和ios邮件客户端为例,来完整配置S/MIME在客户端中的应用。

此时我们的客户端具有了签名和加密解密的功能。但是我们要给对方发送邮件还需要对方的签名证书,所以要求对方给你发送一份仅签名但不加密的邮件。然后将对方的签名证书保存,以后对方就可以给我们发送签名和加密的邮件了。

为了让我们的电脑和对方的电脑客户端能够信任我们的证书,我们还需要将跟证书CA发送给对方,让对方导入到跟证书,这样对方才会认为我们的证书有效。才能给我们发邮件。

以OUTLOOK为例,A要与B互相发送加密的邮件。A要保存B的公钥,由B给A发送一份签名但不加密的邮件。然后A收到这份邮件后,点击签名标记:

点击详细信息:

选中数字证书,然后点击查看详细信息:

点击查看证书:

点击复制证书,因为我们刚才生成的证书没有可以导入的个人公钥的格式,所以我们导出转换一下:

下面三种格式都支持,我们把文件导出到刚才openssl生成的文件夹里,放着以后经常用。

当然上面的步骤也可以用其他证书转换工具,将我们openssl生成的个人公钥转换成可用的格式,但是我们面向小白,所以尽量不采用其他工具,建议搭建按照我的教程操作即可。

好了,上面我们将B的公钥现在保存下来了,我们还需要把B的公钥在outlook中添加的B的邮件联系人中才能向B发送加密的邮件。

找到如图所示1,找到联系人,然后找到B邮件联系人,然后点击编辑,填写基础信息,然后所以2所示,点击证书,然后如图3所以,点击导入。把我们转换成功的个人公钥在这里导入。

稍等几秒钟,电脑一顿卡顿运算后,我们发现证书已经导入。

OK,到此为止在outlook中,A可以向B发钱签名和加密的邮件了。反过来,B向A发送加密的邮件也是按照上面的流程操作即可。至此我们已经完整完成了对outlook客户端的S/MIME的配置。尽情享用吧。

下面我们讲述在ios系统中配置如何配置S/MIME证书,由于苹果的用户体验一绝,所以在配置过程中没有发现难点。直接首先通过附件发送导入PK12证书。然后互相发送签名邮件,保存公钥。就完成了。

请参阅在 iOS 设备上安装 S/MIME 证书的指南。它将指导您完成将自签名证书添加到适用于 S/MIME 的 iOS 邮件应用程序的步骤。

在 iOS 中安装数字证书

如果您阅读了之前详细介绍了使用 OpenSSL 创建自签名 S/MIME 证书的步骤的文章,那么我将在创建证书并将其打包为 PKCS12 格式的地方停下来。为了使证书有任何用途,您需要将其安装在电子邮件客户端中。这篇文章详细介绍了在 iOS 设备上安装数字证书并在 iOS 邮件应用程序中启用 S/MIME 的步骤。

第 1 步 – 在 iOS 设备上加载 .p12 文件

将 .p12 文件的副本通过电子邮件发送到 iOS 设备上可访问的电子邮件地址。这不是在手机上加载它的最安全方式,但在本文中为了简单起见,我们将采用这种方式。收到带有附件的电子邮件后,点击文件附件开始安装过程。如果提示“选择设备”,请选择合适的设备来安装配置文件并确认。

第 2 步 – 安装配置文件

打开“设置”应用并点击“已下载个人资料” 。设备将提示您安装配置文件。点击右上角的安装。如果您的设备受密码保护,系统将提示您输入设备密码。

由于数字证书是自签名的,而不是由知名的受信任的证书颁发机构签名,因此您将收到一条警告消息,说明配置文件未签名。点击右上角的安装继续。

系统将再次提示您安装配置文件。点击屏幕底部的安装按钮。

然后将提示您输入 .p12 文件组装时创建的 PKCS12 导出/导入密码。输入密码,然后点击屏幕右上角的下一步。

现在已安装配置文件和证书。单击屏幕右上角的完成。

第 3 步 – 在 iOS 邮件中启用 S/MIME

现在您已经加载了数字证书并创建了配置文件,您可以开始在 iOS 邮件中使用它。

  1. 打开设置应用
  2. 点击邮件
  3. 点击“帐户”部分下的现有帐户名称
  4. 点按帐户
  5. 点击高级
  6. 在 S/MIME 部分中,点击签名
  7. 启用标志
  8. 确保选择了适当的证书
  9. 返回高级屏幕
  10. 在 S/MIME 部分中,点击默认加密
  11. 默认启用加密
  12. 确保选择了适当的证书
  13. 返回高级屏幕
  14. 确认更改并退出“设置”应用

S/MIME 现在已启用并准备好在下次从此帐户发送电子邮件时使用您的个人数字证书。

第 4 步 – 发送加密电子邮件

回想一下,S/MIME 使用公钥加密,因此在您安装该地址的公钥之前,您将无法将加密的电子邮件发送到另一个地址。

  1. 将签名(未加密)的电子邮件发送到另一个电子邮件地址(或回您自己的电子邮件地址)。
  2. 收到电子邮件后,发件人的电子邮件地址旁边会在 iOS Mail 中显示一个复选标记。
  3. 点击复选标记或地址以查看联系人的详细信息。
  4. 该地址被标记为已签名。
  5. 点击查看证书
  6. 显示证书的详细信息。
  7. 点击安装
  8. 点击完成退出证书详细信息屏幕。
  9. 点击完成退出联系人详细信息屏幕。
  10. 回复签名的电子邮件,iOS 现在可以识别公钥并允许加密的电子邮件通信(蓝色锁图标)。

概括

您现在拥有自己的自签名 S/MIME 证书,可用于发送签名电子邮件。这也允许其他人使用您的公钥向您发送加密的电子邮件。一旦您的收件人向您提供了他们的公钥,您就可以向他们发送加密的电子邮件。

文章完全参考了John Dalesandro的博客。并做了详细的截图和解释,没有这篇文章我就不可能完成。特别感谢,原文出处:https://www.dalesandro.net/installing-digital-certificates-in-ios/

最后请注意:

请注意:此时我们创建的证书没有经过第三方认证。所以你看到的组织或者名称都是伪造的。所以不要将陌生的邮件用户签名和证书添加到信任。一定要在你通过电话或者微信确认该用户邮件就是该用户时,才能将该邮件的证书添加为信任。

本文固定链接: https://www.eoowo.com/?p=1604 | 火星博客

该日志由 Rainer 于2022年04月15日发表在 淘宝 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 用opensll创建自签名 S/MIME 证书,并配置outlook和IOS邮件客户端。 | 火星博客

用opensll创建自签名 S/MIME 证书,并配置outlook和IOS邮件客户端。:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter