Rapsssito / react-native-tcp-socket

React Native TCP socket API for Android, iOS & macOS with SSL/TLS support.
MIT License
303 stars 81 forks source link

TLS Connection #189

Closed ManuelLatorre98 closed 1 month ago

ManuelLatorre98 commented 2 months ago

Hello I'm trying to make a TLS connection between my device and a remote server. I making this to stablish the connection:

 const options ={
      port:3001,
      host:ipLider,
      localAddress:'0.0.0.0',
      reuseAddress:true,
      ca:require('../../../android/app/src/main/assets/certificates/pub.pem')
    }
    return new Promise((resolve, reject) => {
      const socket = TcpSocket.connectTLS(options,()=>{});
      socket.on('error', (error: Error) => {
        reject("Connection Error:" + error);
      });

And have metro.config.js configured like this to be able to use pem and .p12 files:

const {getDefaultConfig} = require('metro-config');
const defaultConfig = getDefaultConfig.getDefaultValues(__dirname);
module.exports = {
  resolver: {
    assetExts: [...defaultConfig.resolver.assetExts, 'pem', 'p12'],
  },
  transformer: {
    getTransformOptions: async () => ({
      transform: {
        experimentalImportSupport: false,
        inlineRequires: true,
      },
    }),
  },
};

I'm working with Typescript and when i try stablish connection I get the follow error:

Internal server error: Connection Error:com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: java.lang.RuntimeException: error:0900006e:PEM routines:OPENSSL_internal:NO_START_LINE

(if i use import instead of require the app crashes)

I maked the public and private keys with ecc 25519 this is the text in pub.pem file of the public key:

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAVBEuY4MD7DMajUYgyav7n9s/99STNRuYMtAwgFHdLpE=
-----END PUBLIC KEY-----

Any idea of what im doing wrong?

vricosti commented 1 month ago

in ca you are passing the public key, it should be a certificate...