Ionic framework 如何使用自签名证书正确设置Ionic(Angular)dev计算机?

Ionic framework 如何使用自签名证书正确设置Ionic(Angular)dev计算机?,ionic-framework,https,ssl-certificate,Ionic Framework,Https,Ssl Certificate,我正在开发一个Ionic Angular应用程序,由于明文流量,我遇到了很多问题。所以我决定即使在编码时也切换到https,但这并不容易 我打开这个问题,提出我找到的答案,以保持跟踪,如果您愿意这样做,我希望能为您节省一些时间。 您的开发人员计算机需要一个主机名。此名称将在证书中声明,https服务将使用此主机名访问(URL必须类似于https://[hostname]:…,证书检查才能通过) 如果您的网络还没有DNS,您可以在您的开发机器上使用类似hosted的东西(有关示例配置,请参阅p.S

我正在开发一个Ionic Angular应用程序,由于明文流量,我遇到了很多问题。所以我决定即使在编码时也切换到https,但这并不容易

我打开这个问题,提出我找到的答案,以保持跟踪,如果您愿意这样做,我希望能为您节省一些时间。

您的开发人员计算机需要一个主机名。此名称将在证书中声明,https服务将使用此主机名访问(URL必须类似于
https://[hostname]:…
,证书检查才能通过)

如果您的网络还没有DNS,您可以在您的开发机器上使用类似hosted的东西(有关示例配置,请参阅p.S.)

以各种格式生成证书(和签名密钥) 自签名\u template.config:

[req]
default_bits       = 2048
default_md         = sha256
prompt             = no
default_keyfile    = [hostname]_self_signed_key.pem
encrypt_key        = no

distinguished_name = dn

req_extensions     = v3_req
x509_extensions    = v3_req

[dn]
C            = PF
ST           = Tahiti
L            = Papeete
O            = c4-soft
emailAddress = ch4mp@c4-soft.com
CN           = [hostname]

[v3_req]
subjectAltName   = critical, @alt_names
basicConstraints = critical, CA:false
keyUsage         = critical, keyCertSign, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = critical, serverAuth, clientAuth

[alt_names]
DNS.1 = [hostname]
DNS.2 = localhost
DNS.3 = 10.0.2.2
self_signed.sh

#/bin/bash
如果[-z“$1”]
然后
回显“用法:”
回声“”
echo“self_signed.sh key_password[java_home][hostname][store_password][certificates\u directory\u path][cacerts\u password]”
回声“”
echo“-java\u home默认为$java\u home”
echo“-主机名默认为$hostname”
echo“-store\u password默认为key\u password”
echo“-证书\目录\路径默认为当前目录”
echo“-cacerts_密码默认为更改”
回声“”
回显“样本:”
回声“/self_signed.sh\”秒3\“\”C:/Java/jdk1.8.0\u 281\“\”bravo-ch4mp\”
回声“”
出口1
其他的
回音“#---------------------------------------------”
echo“#这是一个无操作脚本”
回显“#将输出复制/粘贴到:”
echo“#-生成证书文件”
echo“#-将证书导入cacerts文件”
回音“#---------------------------------------------”
KEY_PASSWORD=“${1}”
回显“#密钥密码:$key#u密码”
如果[-z“$2”]
然后
如果[-z“$JAVA_HOME”]
然后
echo“错误:找不到java主页”
出口1
其他的
JAVA=$JAVA_HOME
fi
其他的
爪哇=2美元
fi
JAVA=$(echo$JAVA | sed's/\\/\//\//g')
echo“#java主页:$java”
if[-f“${JAVA}/lib/security/cacerts”]
然后
#最近的jdk和JREs风格
CACERTS=“${JAVA}/lib/security/CACERTS”
elif[-f“${JAVA}/jre/lib/security/cacerts”]
然后
#旧式JDKs样式(1.8及更高版本)
CACERTS=“${JAVA}/jre/lib/security/CACERTS”
其他的
echo“错误:无法在${JAVA}下找到cacerts”
出口1
fi
echo“#cacerts路径:$cacerts”
如果[-z“${3}”]
然后
HOST=“$HOSTNAME”
其他的
HOST=“${3}”
fi
echo“#主机(证书CN):$host”
如果[-z“${4}”]
然后
STORE_PASSWORD=“$KEY_PASSWORD”
其他的
STORE_PASSWORD=“${4}”
fi
echo“#存储密码:$store_密码”
如果[-z“${5}”]
然后
CERTIF_DIR=“”
其他的
CERTIF_DIR=“${5}”
fi
echo“#证书目录路径:$CERTIF_DIR”
CERTIF_DIR=$(echo$CERTIF_DIR|sed's/\\/\//\//g')
如果[-z“${6}”]
然后
CACERTS_PASSWORD=“changeit”
其他的
CACERTS_PASSWORD=“${6}”
fi
回显“#cacerts密码:$cacerts_密码”
回音“#---------------------------------------------”
fi
回声“”
rm-f${HOST}\u self\u signed.config;
sed's/\[hostname\]/'${HOST}'/g'${CERTIF\u DIR}/self\u signed\u template.config“>“${CERTIF\u DIR}/${HOST}self\u signed.config”
echo openssl req-config \“${CERTIF_DIR}/${HOST}u self_signed.config \”-new-keyout \“${CERTIF_DIR}/${HOST}u self_signed_key.pem \”-out \“${CERTIF_DIR}/${HOST}self signed_cert.pem \”-reqexts v3)req
回声“”
echo openssl x509-req-days 365-extfile\“${CERTIF_DIR}/${HOST}self_signed.config\”-in\“${CERTIF_DIR}/${HOST}self_signed_cert.pem\”-extensions v3_req-signkey\“${CERTIF_DIR}/${HOST}self signed_-key.pem\'-out\{CERTIF_DIR
回声“”
echo openssl pkcs12-导出-输入\“${CERTIF_DIR}/${HOST}self_signed.crt \”-inkey \“${CERTIF_DIR}/${HOST}self_signed_key.pem \”-name${HOST self_signed_-密码传递:${key_password out \“${CERTIF_DIR}/${HOST self signed.pfx\”
回声“”
echo \“${JAVA}/bin/keytool\”-importkeystore-srckeystore \“${CERTIF_DIR}/${HOST}u self_signed.pfx \”-srcstorepass \“${STORE_PASSWORD}\”-srcstoretype pkcs12-srclalias${HOST}自签名-destore \“${CERTIF_DIR}/${HOST}自签名.jks \-destu storetype pkcs12-destu PASSWORD自签名主机${destu
回声“”
echo \“${JAVA}/bin/keytool \”-importkeystore-srckeystore \“${CERTIF_DIR}/${HOST}u self_signed.pfx \”-srcstorepass \“${STORE_PASSWORD}\”-srcstoretype pkcs12-srcalas${HOST}自签名-destore \“${CACERTS}”-deststorepass destspass${CACERTS_PASSWORD别名${HOST}自签名
回声“”
然后运行类似于
/self\u signed.sh“secr3!”C:/Java/jdk1.8.0\u 281

对每个JDK/JRE执行
/self\u signed.sh
,然后 从第二次执行开始,只需在第一次执行时复制/粘贴/运行所有输出命令,并且仅在最后一个命令时执行(在JDK/JRE
cacerts
文件中导入证书)(否则会丢失以前的证书)

在Java的cacerts中导入证书可能需要管理员权限

在windows上,Git Bash在路径上具有所有的
sed
openssl
keytool

将此证书作为受信任的根权限导入 如果将此证书添加到受信任的根权限,则在浏览诸如
https://[hostname]:…
之类的URL时,浏览器将不会显示错误或警告

在windows上,这可以通过
certmgr.msc
完成(右键单击受信任的根权限,然后导入)。如果您在其他操作系统上成功执行相同操作,请发表评论

将Ionic Angular配置为使用此证书通过https提供服务 编辑
angular.json
项目/architect/service/options/
下设置“sslCert”和“sslKey”,并将其分别指向前面生成的
[hostname]\u self\u signed.crt
[hostname]\u self\u signed\u key.pem

upstream_servers={}
# This are my internet provider DNS servers
upstream_servers["."]="104.42.155.203,52.229.31.10,113.197.68.2,113.197.68.3"

# My dev machine IP on local network
bind_address="192.168.8.100"

# The IPs allowed to connect (smartphones I test from)
recursive_acl="192.168.8.0/24"

# This is the file Deadwood uses to read the cache to and from disk
cache_file = "dw_cache_bin"

# laptop-jerem is referenced as [hostname] all over the tutorial
ip4={}
ip4["laptop-jerem."]="192.168.8.100"
connect
/subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.frontendUrl,value="https://[hostname]:8443/auth")
/core-service=management/security-realm=UndertowRealm:add()
/core-service=management/security-realm=UndertowRealm/server-identity=ssl:add(keystore-path=[hostname]_self_signed.jks, keystore-relative-to=jboss.server.config.dir, keystore-password=[keystore_password])
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=security-realm, value=UndertowRealm)
reload