Spring 启动 SSL webapp iOS 测试

Spring Boot SSL webapp iOS testing

我正在试验 Spring 引导创建 WebApp。

为了创建 SSL 证书,我发出以下命令:

keytool -alias devssl -keystore devssl.p12 -genkeypair -keyalg RSA -sigalg SHA256withRSA /
-keysize 2048 -storetype PKCS12 -validity 365 -dname "CN=Frankie, OU=Frankie O=Frankie, /
L=City, S=State, C=UK" -ext SAN=DNS:localhost,DNS:blueye,IP:127.0.0.1,IP:10.1.1.2"

据我所知,这意味着此类证书对以下地址有效:

证书很容易安装在 Spring:

server.ssl.key-store-type=PKCS12
server.ssl.key-store=devssl.p12
server.ssl.key-store-password=password
server.ssl.key-alias=devssl
security.require-ssl=true

我在 Windows 的受信任的根证书颁发机构下安装证书后,它也很好用。

我无法让它在 iOS 下工作。

我将证书通过电子邮件发送给自己。
安装在 iPhone.
但我总是得到 "this connection is not private".

知道如何在 iOS 上进行这项工作吗?

我一直在努力让 iOS 接受自签名证书作为唯一真实来源。我必须通过颁发适当的个人证书颁发机构来解决它。让 iOS 信任那个权威。然后使用该机构验证的证书对网站进行签名。

我将描述所需的命令,因为它们可以为某人节省几个小时。以下是我们将要做的 "birds eye"。

AUTHORITY - 这将作为您签署的所有证书的信任来源。您将必须在每个 machine/phone 上安装授权机构,您需要使用自定义证书

  1. 为证书颁发机构 (CA) 生成私钥
  2. 为证书颁发机构 (CA) 生成证书
  3. 在 Windows
  4. 上安装证书颁发机构
  5. 在 iOS
  6. 上安装证书颁发机构

CLIENT - 我们可以为我们网络内的所有项目发布私钥。这些私钥将由我们自己生成和安装的权限进行验证。

  1. 为客户端生成私钥
  2. 生成证书签名请求 (CSR)
  3. 让 CA 签署 CSR,从而生成客户端证书
  4. 将客户端证书和 CA 证书合并到一个由 Spring
  5. 读取的 pkcs12 文件中

现在开始实际命令:

生成私钥,我们也将使用相同的命令为客户端生成私钥:

openssl genrsa -des3 -out myCA.key 2048

为您的证书颁发机构生成证书。您将被问到几个问题,none 个问题非常重要,它们只会让您自己识别您的证书。

openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.crt

您现在拥有三个文件。 myCA.key(私钥)以及 myCA.pem 和 myCA.crt 是您的证书颁发机构的证书文件。

安装在 Windows: 单击 Windows 上的 myCA.crt 文件并按照屏幕说明进行操作。然后点击开始 -> 运行 -> `` certmgr.msc`。它将打开 Windows 证书管理器。您会在 "Intermediate Certification Authorities" 下找到您安装的证书。您需要将该文件拖到 "Trusted Root Certification Authorities".

安装在 iOS: 通过电子邮件将 myCA.pem 文件发送给自己。使用 Apple Mail App 打开 iOS 上的电子邮件。按照说明进行操作,将安装证书。要卸载您可以转到设置 -> 常规 -> 配置文件。正确安装后 iOS 需要第二步让您信任证书,您必须转到设置 -> 常规 -> 关于 -> 证书信任设置并为根证书启用完全信任。


您现在在 Windows 机器和 iOS phone 上都安装了本地 CA(证书颁发机构)。让我们创建一个网站证书。


为网站生成私钥。

openssl genrsa -des3 -out myWebsite.key 2048

生成 CSR(证书签名请求):

openssl req -new -key myWebSite.key -out myWebsite.csr

现在我们有了网站密钥和证书签名请求,我们需要创建一个配置文件,openssl 将使用它来生成我们的网站证书。使用以下信息创建名为 myWebsite.ext 的文件。您唯一必须确定的是替代名称。您可以同时拥有 IP 和 DNS。请务必输入您的网站将使用的所有备选方案。

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = mywebsite
DNS.3 = mywebsite.local
IP.1 = 10.1.1.3
IP.2 = 127.0.0.1

现在我们将使用 CA 证书和私钥以及 CSR(证书签名请求)和配置文件为网站生成适当的证书。由于 iOS 13 Apple 只允许最多 825 天的证书,所以这就是我们将使用的。

openssl x509 -req -in myWebsite.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out myWebsite.crt -days 825 -sha256 -extfile myWebsite.ext

您现在将拥有以下文件:

myCA.key      - certificate authority private key  
myCA.pem      - certificate authority certificate pem format
myCA.crt      - certificate authority certificate crt format
myWebsite.key - website private key  
myWebsite.csr - website certificate sign request  
myWebsite.ext - website config file for openssl sign request  
myWebsite.crt - website certificate crt format

唯一缺少的是将 myWebsite.crt 转换为 p12 格式,我们可以使用以下命令完成:

openssl pkcs12 -export -in myCA.crt -inkey myCA.key -in myWebsite.crt -inkey myWebsite.key -name myWebsite -out myWebsite.p12

现在,要使 Spring 引导使用此证书,只需打开 application.properties 文件并确保它包含以下行:

server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate, place it src/main/resources
server.ssl.key-store=classpath:myWebsite.p12
# The password used to generate the certificate
server.ssl.key-store-password=PASSWORD-USED
# The alias mapped to the certificate (the -name myWebsite on the last command)
server.ssl.key-alias=myWebsite 
# force SSL 
security.require-ssl=true

好了。具有适当 SSL 验证的开发或内部项目。希望这可以节省一些时间。

您似乎在正确创建证书时遇到了问题,有关如何创建证书的重要指南,请查看:

https://jamielinux.com/docs/openssl-certificate-authority/introduction.html

如果您完全按照它进行操作,并且知道您的 DNS 名称是什么,以及您使用的是什么密码,那么您应该没有任何问题。我在下面提供了用于制作证书的配置文件,以及一个有助于套接字的项目:

https://github.com/eamonwhiter73/IOSObjCWebSockets