【问题标题】:Android not trusting self-signed CAAndroid 不信任自签名 CA
【发布时间】:2018-06-23 03:13:18
【问题描述】:

我无法让 android 信任我的自签名证书/ca。我在this video 中尝试了以下操作:

  1. 使用如下所示的脚本为 m.m 生成 CA 和证书。
  2. 使用新的证书文件重新加载 nginx(可能没有必要)
  3. 将 CA 复制到我的本地设备
  4. 安装 CA
  5. 确认它已安装并在用户证书下“受信任”
  6. 试着去mm
  7. 证书不受信任

我已经阅读了一些指南,说我应该能够生成 CA,在设备上安装/信任 CA,然后 CA 签名的任何内容都应该被信任。我可以让它在我的 Mac OS 机器上运行,但不能在 Android 或 iOS 上运行(我没有尝试过 Windows 或 Linux)。

gen.sh:

#!/bin/bash
domain="m"
name="$1"

if [ ! -e "$domain".key ]; then
        openssl genrsa -des3 -out "$domain".key 10240
fi;
if [ ! -e "$domain".pem ]; then
        openssl req -x509 -new -nodes -key "$domain".key -sha256 -days 1825 -out "$domain".pem -subj "/C=US/ST=Tennessee/L=Chattanooga/O=CA Test/CN=Management/emailAddress=test@example.com"

fi;

mkdir $name
openssl genrsa -out "$name/$name".key 8192
openssl req -new -key "$name/$name".key -out "$name/$name".csr -subj "/C=US/ST=Tennessee/L=Chattanooga/O=CA Test/CN=Management/emailAddress=test@example.com"

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

[alt_names]
" >"$name/$name".ext

i=1
for n in "$@"; do
  echo "DNS.$i = $n" | tee -a "$name/$name".ext
  i=$((i+1))
done

openssl x509 -req -in "$name/$name".csr -CA "$domain".pem -CAkey "$domain".key -CAcreateserial -out "$name/$name".crt -days 1825 -sha256 -extfile "$name/$name".ext
cp $name/$name.{crt,key} /srv/docker/nginx/certs/

【问题讨论】:

    标签: android ios ssl self-signed


    【解决方案1】:

    信任管理器

    您可以信任域而无需使用它的证书。只需使用 TrustManager。如果您正确使用它,Google Play 商店不会对您的应用产生任何问题。

    SimpleTrust 是一种信任具有自签名或不正确认证的特定域的简单方法。

    从 JitPack 中获取它并将其实现到您的依赖项中。

    1.将 JitPack 添加到您的根 build.gradle

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    2。添加依赖

    dependencies {
            implementation 'com.github.m-devs:SimpleTrust:1.0.0'
    }
    

    3.将其加载到您要使用的类中。

    SimpleTrust simpleTrust = new SimpleTrust();
    simpleTrust.addTrusted("your-trusted-domain.com");
    simpleTrust.load();
    

    4.使用后重置设置。

    ...
    simpleTrust.reset();
    

    有关其他用法和更详细的指南,请查看 GitHub 上的 Guide 文件。

    【讨论】:

    • 如果我正在编写一个应用程序,这可能会起作用,我应该更清楚;我正在尝试让浏览器(如 Google Chrome)接受自签名证书,而不是我正在写的接受证书的应用程序。
    猜你喜欢
    • 2015-11-02
    • 2012-10-26
    • 2017-12-10
    • 2016-11-29
    • 1970-01-01
    • 2016-09-13
    • 2020-07-30
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多