1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | PKCS12_newpass - change the password of a PKCS12 structure
|
---|
6 |
|
---|
7 | =head1 SYNOPSIS
|
---|
8 |
|
---|
9 | #include <openssl/pkcs12.h>
|
---|
10 |
|
---|
11 | int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass);
|
---|
12 |
|
---|
13 | =head1 DESCRIPTION
|
---|
14 |
|
---|
15 | PKCS12_newpass() changes the password of a PKCS12 structure.
|
---|
16 |
|
---|
17 | B<p12> is a pointer to a PKCS12 structure. B<oldpass> is the existing password
|
---|
18 | and B<newpass> is the new password.
|
---|
19 |
|
---|
20 | =head1 NOTES
|
---|
21 |
|
---|
22 | Each of B<oldpass> and B<newpass> is independently interpreted as a string in
|
---|
23 | the UTF-8 encoding. If it is not valid UTF-8, it is assumed to be ISO8859-1
|
---|
24 | instead.
|
---|
25 |
|
---|
26 | In particular, this means that passwords in the locale character set
|
---|
27 | (or code page on Windows) must potentially be converted to UTF-8 before
|
---|
28 | use. This may include passwords from local text files, or input from
|
---|
29 | the terminal or command line. Refer to the documentation of
|
---|
30 | L<UI_OpenSSL(3)>, for example.
|
---|
31 |
|
---|
32 | =head1 RETURN VALUES
|
---|
33 |
|
---|
34 | PKCS12_newpass() returns 1 on success or 0 on failure. Applications can
|
---|
35 | retrieve the most recent error from PKCS12_newpass() with ERR_get_error().
|
---|
36 |
|
---|
37 | =head1 EXAMPLES
|
---|
38 |
|
---|
39 | This example loads a PKCS#12 file, changes its password and writes out
|
---|
40 | the result to a new file.
|
---|
41 |
|
---|
42 | #include <stdio.h>
|
---|
43 | #include <stdlib.h>
|
---|
44 | #include <openssl/pem.h>
|
---|
45 | #include <openssl/err.h>
|
---|
46 | #include <openssl/pkcs12.h>
|
---|
47 |
|
---|
48 | int main(int argc, char **argv)
|
---|
49 | {
|
---|
50 | FILE *fp;
|
---|
51 | PKCS12 *p12;
|
---|
52 |
|
---|
53 | if (argc != 5) {
|
---|
54 | fprintf(stderr, "Usage: pkread p12file password newpass opfile\n");
|
---|
55 | return 1;
|
---|
56 | }
|
---|
57 | if ((fp = fopen(argv[1], "rb")) == NULL) {
|
---|
58 | fprintf(stderr, "Error opening file %s\n", argv[1]);
|
---|
59 | return 1;
|
---|
60 | }
|
---|
61 | p12 = d2i_PKCS12_fp(fp, NULL);
|
---|
62 | fclose(fp);
|
---|
63 | if (p12 == NULL) {
|
---|
64 | fprintf(stderr, "Error reading PKCS#12 file\n");
|
---|
65 | ERR_print_errors_fp(stderr);
|
---|
66 | return 1;
|
---|
67 | }
|
---|
68 | if (PKCS12_newpass(p12, argv[2], argv[3]) == 0) {
|
---|
69 | fprintf(stderr, "Error changing password\n");
|
---|
70 | ERR_print_errors_fp(stderr);
|
---|
71 | PKCS12_free(p12);
|
---|
72 | return 1;
|
---|
73 | }
|
---|
74 | if ((fp = fopen(argv[4], "wb")) == NULL) {
|
---|
75 | fprintf(stderr, "Error opening file %s\n", argv[4]);
|
---|
76 | PKCS12_free(p12);
|
---|
77 | return 1;
|
---|
78 | }
|
---|
79 | i2d_PKCS12_fp(fp, p12);
|
---|
80 | PKCS12_free(p12);
|
---|
81 | fclose(fp);
|
---|
82 | return 0;
|
---|
83 | }
|
---|
84 |
|
---|
85 |
|
---|
86 | =head1 NOTES
|
---|
87 |
|
---|
88 | If the PKCS#12 structure does not have a password, then you must use the empty
|
---|
89 | string "" for B<oldpass>. Using NULL for B<oldpass> will result in a
|
---|
90 | PKCS12_newpass() failure.
|
---|
91 |
|
---|
92 | If the wrong password is used for B<oldpass> then the function will fail,
|
---|
93 | with a MAC verification error. In rare cases the PKCS12 structure does not
|
---|
94 | contain a MAC: in this case it will usually fail with a decryption padding
|
---|
95 | error.
|
---|
96 |
|
---|
97 | =head1 BUGS
|
---|
98 |
|
---|
99 | The password format is a NULL terminated ASCII string which is converted to
|
---|
100 | Unicode form internally. As a result some passwords cannot be supplied to
|
---|
101 | this function.
|
---|
102 |
|
---|
103 | =head1 SEE ALSO
|
---|
104 |
|
---|
105 | L<PKCS12_create(3)>, L<ERR_get_error(3)>,
|
---|
106 | L<passphrase-encoding(7)>
|
---|
107 |
|
---|
108 | =head1 COPYRIGHT
|
---|
109 |
|
---|
110 | Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
|
---|
111 |
|
---|
112 | Licensed under the OpenSSL license (the "License"). You may not use
|
---|
113 | this file except in compliance with the License. You can obtain a copy
|
---|
114 | in the file LICENSE in the source distribution or at
|
---|
115 | L<https://www.openssl.org/source/license.html>.
|
---|
116 |
|
---|
117 | =cut
|
---|