Android不信任自签名CA.

时间:2018-01-14 05:17:29

标签: android ios ssl self-signed

我不能让android相信我的自签名证书/ ca.我在this video中尝试了以下内容:

  1. 使用如下所示的脚本(及以下)为m.m生成CA和证书。
  2. 使用新的证书文件重新加载nginx(可能没有必要)
  3. 将CA复制到我的本地设备
  4. 安装CA
  5. 确认已在用户证书下安装并“信任”
  6. 尝试去m.m
  7. Cert不受信任
  8. 我已经阅读了几个指南,说我应该能够生成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/
    

1 个答案:

答案 0 :(得分:0)

TrustManager

您可以信任域而无需使用其证书。只需使用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文件。