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"
据我所知,这意味着此类证书对以下地址有效:
- 本地主机
- 蓝眼
- 127.0.0.1
- 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 上安装授权机构,您需要使用自定义证书
- 为证书颁发机构 (CA) 生成私钥
- 为证书颁发机构 (CA) 生成证书
- 在 Windows
上安装证书颁发机构
- 在 iOS
上安装证书颁发机构
CLIENT - 我们可以为我们网络内的所有项目发布私钥。这些私钥将由我们自己生成和安装的权限进行验证。
- 为客户端生成私钥
- 生成证书签名请求 (CSR)
- 让 CA 签署 CSR,从而生成客户端证书
- 将客户端证书和 CA 证书合并到一个由 Spring
读取的 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 名称是什么,以及您使用的是什么密码,那么您应该没有任何问题。我在下面提供了用于制作证书的配置文件,以及一个有助于套接字的项目:
我正在试验 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"
据我所知,这意味着此类证书对以下地址有效:
- 本地主机
- 蓝眼
- 127.0.0.1
- 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 上安装授权机构,您需要使用自定义证书
- 为证书颁发机构 (CA) 生成私钥
- 为证书颁发机构 (CA) 生成证书
- 在 Windows 上安装证书颁发机构
- 在 iOS 上安装证书颁发机构
CLIENT - 我们可以为我们网络内的所有项目发布私钥。这些私钥将由我们自己生成和安装的权限进行验证。
- 为客户端生成私钥
- 生成证书签名请求 (CSR)
- 让 CA 签署 CSR,从而生成客户端证书
- 将客户端证书和 CA 证书合并到一个由 Spring 读取的 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 名称是什么,以及您使用的是什么密码,那么您应该没有任何问题。我在下面提供了用于制作证书的配置文件,以及一个有助于套接字的项目: