将.pem证书合并到truststore / keystore.jsk

时间:2019-12-04 15:41:23

标签: ssl openssl ssl-certificate keytool

我有一个组合的.pem文件,如下所示:

public class Phrases {
    public Context context;
    public static String[] categories = {"feeling", "home", "work", "medical", "food", "activity", "common", "emergency"};
    private static Phrases phrases = null;
    public Map<String, String[]> allPhrases = new HashMap<>();

    private Phrases() {
    }

    public static Phrases getPhrases() {
        if(phrases == null) {
            phrases = new Phrases();
        }
        return phrases;
    }

    public void fetchAllPhrases(Context context) {
        this.context = context;
        Resources res = context.getResources();
        allPhrases.put(categories[0], res.getStringArray(R.array.feeling));
        allPhrases.put(categories[1],  res.getStringArray(R.array.home));
        allPhrases.put(categories[2], res.getStringArray(R.array.work));
        allPhrases.put(categories[3], res.getStringArray(R.array.medical));
        allPhrases.put(categories[4], res.getStringArray(R.array.food));
        allPhrases.put(categories[5], res.getStringArray(R.array.activity));
        allPhrases.put(categories[6], res.getStringArray(R.array.common));
        allPhrases.put(categories[7], res.getStringArray(R.array.emergency));
//        Log.v("PHRASES", Arrays.toString(allPhrases.toString()));
    }

    public Map<String, String[]> getAllPhrases() {
        return allPhrases;
    }
}

我认为这是ssl,key和ca的组合。我需要将其转换为truststore.jks和keystore.jks以用于我的服务。

public class CustomFragment extends Fragment {
    private ArrayAdapter<String> adapter;
    private ListView listView;
    private FloatingActionButton addPhraseButton;
    private TextView phraseTitleTextView;
    private TextToSpeech textToSpeech;
    private String[] phrases;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_custom, container, false);
        //receive intent
        String categories = getArguments().getString("categories");

        Phrases phrasesObj = Phrases.getPhrases();
        phrasesObj.fetchAllPhrases(view.getContext());
        phrases = phrasesObj.getAllPhrases().get(categories);

        phraseTitleTextView = view.findViewById(R.id.label_phrases_txtview);
        addPhraseButton = view.findViewById(R.id.add_phrases_btn);
        // setting local for text to speech
        textToSpeech = new TextToSpeech(getActivity().getApplicationContext(), new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                textToSpeech.setLanguage(Locale.US);
            }
        });

        //setting adapter and listview
        adapter = new ArrayAdapter<String>(getContext(), R.layout.entry_item, R.id.phrase_textview, phrases);
        listView = (ListView) view.findViewById(R.id.phrases_list);
        listView.setAdapter(adapter);
        listView.setItemsCanFocus(true);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> paren, View view, int position, long id) {
                String text = phrases[position];
                Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
                textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH,null, null);
            }
        });
        return view;
    }
}

但是抛出:

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

如果我尝试也发生以下情况:

openssl pkcs12 -export -out cert.pkcs12 -in cert
keytool -importcert -v -trustcacerts -alias eb-srv -file cert.pkcs12 -keystore truststore.jks

1 个答案:

答案 0 :(得分:0)

您拥有的第一个命令(openssl)将为您创建PKCS12格式的密钥库。但是,对于信任库,您需要在链中分别添加每个证书。

当您具有以下格式的证书链时,通常位于此层次结构中。

-----BEGIN CERTIFICATE-----
User
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Sub CA/CA
-----END CERTIFICATE-----
...

您应该添加到信任库中的是CA和Sub CA证书。因此,您需要将这些证书分成不同的文件,并为每个证书运行此命令。请注意,您不需要为用户证书执行此操作。

  

keytool -importcert -keystore truststore.jks -storepass [密码]-文件[certificate_file]

第一个命令将以PKCS12格式创建密钥库。如果您需要其他格式,例如jks,则可以运行以下命令:

  

keytool -importkeystore -srckeystore [pkcs12_keystore] -srcstorepass [pkcs12_password] -srcstoretype pkcs12 -destkeystore [jks_keystore_file] -deststorepass [jks_keystore_password] -deststoretype jks